Commit 31142395 authored by Nathan CHAMBRON's avatar Nathan CHAMBRON
Browse files

Merge remote-tracking branch 'origin/develop' into mergeIntoGraphView

# Conflicts:
#	Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/TrackableWindow.cs
#	Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldAnchorWindow.cs
#	Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldLinkWindow.cs
#	Assets/ETSI.ARF/ARF World Storage API/Editor/Windows/WorldStorageWindow.cs
#	Assets/ETSI.ARF/ARF World Storage API/Materials.meta
#	UserSettings/Layouts/default-2021.dwlt
#	UserSettings/Search.settings
parents 813decd2 ce629e27
Loading
Loading
Loading
Loading
+22 −14
Original line number Diff line number Diff line
@@ -234,10 +234,10 @@ namespace Assets.ETSI.ARF.ARF_World_Storage_API.Editor.Windows

                //uuid
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Uuid ", EditorStyles.boldLabel, GUILayout.Width(50));
                EditorGUILayout.LabelField("UUID ", EditorStyles.boldLabel, GUILayout.Width(50));
                if (!SaveInfo.instance.nodePositions.ContainsKey(worldAnchor.UUID.ToString()))
                {
                    EditorGUILayout.LabelField("none Yet");
                    EditorGUILayout.LabelField("none yet (element not yet saved in the server)");
                }
                else
                {
@@ -535,10 +535,10 @@ namespace Assets.ETSI.ARF.ARF_World_Storage_API.Editor.Windows

                //uuid
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Uuid ", EditorStyles.boldLabel, GUILayout.Width(50));
                EditorGUILayout.LabelField("UUID ", EditorStyles.boldLabel, GUILayout.Width(50));
                if (!SaveInfo.instance.nodePositions.ContainsKey(trackable.UUID.ToString()))
                {
                    EditorGUILayout.LabelField("none Yet");
                    EditorGUILayout.LabelField("none yet (element not yet saved in the server)");
                }
                else
                {
@@ -619,15 +619,23 @@ namespace Assets.ETSI.ARF.ARF_World_Storage_API.Editor.Windows
                EditorGUILayout.LabelField("Format ", GUILayout.Width(50));
                trackable.TrackableEncodingInformation.DataFormat = (EncodingInformationStructure.DataFormatEnum)EditorGUILayout.EnumPopup(trackable.TrackableEncodingInformation.DataFormat);
                EditorGUILayout.LabelField("Version ", GUILayout.Width(50));
                float floatVersion = EditorGUILayout.DelayedFloatField(float.Parse(trackable.TrackableEncodingInformation._Version));
                float floatVersion;
                if (trackable.TrackableEncodingInformation._Version != null)
                {
                    floatVersion = EditorGUILayout.DelayedFloatField(float.Parse(trackable.TrackableEncodingInformation._Version.Replace(".",",")));
                }
                else
                {
                    floatVersion = EditorGUILayout.DelayedFloatField(0);
                }
                trackable.TrackableEncodingInformation._Version = floatVersion.ToString();
                EditorGUILayout.EndHorizontal();

                //trackable payload
                /*//trackable payload
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Trackable Payload ", EditorStyles.boldLabel, GUILayout.Width(140));
                EditorGUILayout.LabelField("===============================================================================");
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.EndHorizontal();*/

                //keyvaluetags=================================================================================================TOBEMODIFIED
                EditorGUILayout.BeginHorizontal();
@@ -859,10 +867,10 @@ namespace Assets.ETSI.ARF.ARF_World_Storage_API.Editor.Windows

                //uuid
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField("Uuid ", EditorStyles.boldLabel, GUILayout.Width(50));
                EditorGUILayout.LabelField("UUID ", EditorStyles.boldLabel, GUILayout.Width(50));
                if (!SaveInfo.instance.linkIds.Contains(worldLink.UUID.ToString()))
                {
                    EditorGUILayout.LabelField("none Yet");
                    EditorGUILayout.LabelField("none yet (element not yet saved in the server)");
                }
                else
                {
@@ -884,14 +892,14 @@ namespace Assets.ETSI.ARF.ARF_World_Storage_API.Editor.Windows
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.BeginHorizontal();
                GUILayout.Space(50);
                EditorGUILayout.LabelField("Uuid ", GUILayout.Width(75));
                EditorGUILayout.LabelField("UUID ", GUILayout.Width(75));
                if (SaveInfo.instance.nodePositions.ContainsKey(worldLink.UUIDFrom.ToString()))
                {
                    EditorGUILayout.LabelField(worldLink.UUIDFrom.ToString());
                }
                else
                {
                    EditorGUILayout.LabelField("no UUID yet");
                    EditorGUILayout.LabelField("no UUID yet (element not yet saved in the server)");
                }
                EditorGUILayout.EndHorizontal();

@@ -909,14 +917,14 @@ namespace Assets.ETSI.ARF.ARF_World_Storage_API.Editor.Windows
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.BeginHorizontal();
                GUILayout.Space(50);
                EditorGUILayout.LabelField("Uuid ", GUILayout.Width(70));
                EditorGUILayout.LabelField("UUID ", GUILayout.Width(70));
                if (SaveInfo.instance.nodePositions.ContainsKey(worldLink.UUIDTo.ToString()))
                {
                    EditorGUILayout.LabelField(worldLink.UUIDTo.ToString());
                }
                else
                {
                    EditorGUILayout.LabelField("no UUID yet");
                    EditorGUILayout.LabelField("no UUID yet (element not yet saved in the server)");
                }
                EditorGUILayout.EndHorizontal();

+108 −99
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Last change: June 2022
// Last change: July 2022
//

#define USING_OPENAPI_GENERATOR // alt. is Swagger
@@ -25,6 +25,7 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using TMPro;
using ETSI.ARF.WorldStorage.REST;
using System;

@@ -60,7 +61,10 @@ namespace ETSI.ARF.WorldStorage.UI
        Vector3 localCRS_pos;
        Vector3 localCRS_rot;
        byte[] trackablePayload = new byte[1] { 0 };

        [SerializeField] Dictionary<string, List<string>> keyValueTags = new Dictionary<string, List<string>>();
        string key1 = "";
        string value1 = "";

        // UI stuffs
        private Vector2 scrollPos;
@@ -74,9 +78,7 @@ namespace ETSI.ARF.WorldStorage.UI

        public static void ShowWindow(WorldStorageServer ws, WorldStorageUser user, string UUID = "")
        {
            Type inspectorType = Type.GetType("UnityEditor.InspectorWindow,UnityEditor.dll");
            GetWindow<TrackableWindow>("Menu Editor", true, inspectorType);
            winSingleton = EditorWindow.GetWindow(typeof(TrackableWindow), false, WorldStorageWindow.winName) as TrackableWindow;
            winSingleton = EditorWindow.GetWindow(typeof(TrackableWindow), false, "ETSI ARF - Trackable") as TrackableWindow;
            winSingleton.worldStorageServer = ws;
            winSingleton.worldStorageUser = user;
            if (!string.IsNullOrEmpty(UUID))
@@ -86,6 +88,27 @@ namespace ETSI.ARF.WorldStorage.UI
            }
        }

        public static GameObject GenerateAndUpdateVisual(string UUID, string name, Vector3 pos, Vector3 rot)
        {
            ETSI.ARF.WorldStorage.UI.Prefabs.WorldStoragePrefabs prefabs;
            prefabs = (Prefabs.WorldStoragePrefabs)Resources.Load("ARFPrefabs");
            GameObject arf = GameObject.Find("ARF Visuals");
            GameObject visual = GameObject.Find(UUID);

            if (arf == null) arf = new GameObject("ARF Visuals");
            if (visual == null)
            {
                visual = SceneAsset.Instantiate<GameObject>(prefabs.trackablePrefab, pos, Quaternion.Euler(rot), arf.transform); // TODO rot
                visual.name = UUID;
            }
            else
            {
                visual.transform.SetPositionAndRotation(pos, Quaternion.Euler(rot));
            }
            visual.transform.Find("Canvas/Text").GetComponent<TextMeshProUGUI>().text = $"Name: { name }\nUUID: { UUID }";
            return visual;
        }

        public TrackableWindow()
        {
            // init somne stuffs
@@ -96,8 +119,9 @@ namespace ETSI.ARF.WorldStorage.UI
            ori = GUI.backgroundColor; // remember ori color

            gsTest = new GUIStyle("window");
            gsTest.normal.textColor = WorldStorageWindow.arfColors[0];
            //gsTest.normal.textColor = WorldStorageWindow.arfColors[0];
            gsTest.fontStyle = FontStyle.Bold;
            gsTest.fontSize = 16;

            scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.ExpandWidth(true));
            WorldStorageWindow.DrawCopyright();
@@ -120,71 +144,19 @@ namespace ETSI.ARF.WorldStorage.UI
            GUILayout.Label("User: " + worldStorageUser.userName, EditorStyles.whiteLargeLabel);
            EditorGUILayout.Space();

            //GUILayout.BeginHorizontal();
            customName = EditorGUILayout.TextField("Name of Trackable", customName);
            customName = EditorGUILayout.TextField("Name of Trackable:", customName);
#if isDEBUG
            GUILayout.Label("UUID: " + UUID, EditorStyles.miniLabel); // readonly
            GUILayout.Label("Creator UID: " + creatorUUID, EditorStyles.miniLabel); // readonly
#endif
            EditorGUILayout.Space();

            GUI.backgroundColor = WorldStorageWindow.arfColors[1];
            if (GUILayout.Button("Read Parameters"))
            {
                UUID = WorldStorageWindow.GetUUIDFromString(customName);
                if (UUID == null) UUID = customName; // try this
                GetTrackableParams();
            }
            GUI.backgroundColor = ori;

            type = (Trackable.TrackableTypeEnum)EditorGUILayout.EnumPopup("Trackable Type:", type);
            unit = (UnitSystem)EditorGUILayout.EnumPopup("Unit System:", unit);

            EditorGUILayout.Space(10);
            trackableSize = EditorGUILayout.Vector3Field("Trackable Size:", trackableSize);

            EditorGUILayout.Space(10);
            GUILayout.Label("Local CRS:");
            localCRS_pos = EditorGUILayout.Vector3Field("Position:", localCRS_pos);
            localCRS_rot = EditorGUILayout.Vector3Field("Rotation:", localCRS_rot);

            EditorGUILayout.Space();
            if (GUILayout.Button("Generate Dummy Payload"))
            {
                // dummy
                trackablePayload = new byte[100];
                for (int i = 0; i < trackablePayload.Length; i++)
                {
                    trackablePayload[i] = (byte)i;
                }
            }

            EditorGUILayout.Space();
            groupEnabled = EditorGUILayout.BeginToggleGroup("Optional Parameters:", groupEnabled);
            //EditorGUILayout.IntField("Number of KeyValues", 0);
            //EditorGUILayout.Space();
            //EditorGUILayout.TextField("Key", "");
            //EditorGUILayout.TextField("Value", "");
            if (GUILayout.Button("Generate Dummy Key Values"))
            {
                // dummy
                keyValueTags.Clear();
                keyValueTags.Add("Location", new List<string> { "Room1" });
            }
            // Test
            //keyValueTags.Add("1", "a");
            //ScriptableObject target = this;
            //SerializedObject so = new SerializedObject(target);
            //SerializedProperty stringsProperty = so.FindProperty("trackables");
            //EditorGUILayout.PropertyField(stringsProperty, true); // True means show children
            //so.ApplyModifiedProperties(); // Remember to apply modified properties
            EditorGUILayout.EndToggleGroup();
            
            GUILayout.EndVertical();

            // ###########################################################
            GUI.backgroundColor = WorldStorageWindow.arfColors[1];
            if (GUILayout.Button("Create New Trackable"))
            // ---------------------
            // Toolbar
            // ---------------------
            EditorGUILayout.BeginHorizontal();
            GUI.backgroundColor = WorldStorageWindow.arfColors[2];
            if (GUILayout.Button("Create"))
            {
                Debug.Log("POST Trackable");

@@ -192,17 +164,13 @@ namespace ETSI.ARF.WorldStorage.UI
                if (string.IsNullOrEmpty(UUID) || UUID == "0") UUID = System.Guid.Empty.ToString();
                Trackable obj = GenerateTrackable();
                UUID = TrackableRequest.AddTrackable(worldStorageServer, obj);

                if (WorldStorageWindow.WorldStorageWindowSingleton != null)
                {
                UUID = UUID.Trim('"'); //Bugfix: remove " from server return value
                WorldStorageWindow.WorldStorageWindowSingleton.GetTrackables();
                WorldStorageWindow.WorldStorageWindowSingleton.Repaint();
            }
                Close();
            }

            GUI.backgroundColor = WorldStorageWindow.arfColors[2];
            if (GUILayout.Button("Modify Trackable"))
            GUI.backgroundColor = WorldStorageWindow.arfColors[0];
            if (GUILayout.Button("Update"))
            {
                Debug.Log("PUT Trackable");

@@ -210,6 +178,7 @@ namespace ETSI.ARF.WorldStorage.UI
                {
                    Trackable obj = GenerateTrackable();
                    UUID = TrackableRequest.UpdateTrackable(worldStorageServer, obj);
                    UUID = UUID.Trim('"'); //Bugfix: remove " from server return value
                }
                if (WorldStorageWindow.WorldStorageWindowSingleton != null)
                {
@@ -219,9 +188,8 @@ namespace ETSI.ARF.WorldStorage.UI
                Close();
            }

            // ###########################################################
            GUI.backgroundColor = WorldStorageWindow.arfColors[3];
            if (GUILayout.Button("Delete Trackable"))
            if (GUILayout.Button("Delete"))
            {
                Debug.Log("Delete Trackable");
                TrackableRequest.DeleteTrackable(worldStorageServer, UUID);
@@ -238,12 +206,47 @@ namespace ETSI.ARF.WorldStorage.UI
            }
            GUI.backgroundColor = ori;

            // ###########################################################
            GUI.backgroundColor = WorldStorageWindow.arfColors[5];
            if (GUILayout.Button("Generate GameObject Component"))
            if (GUILayout.Button("Generate/Update GameObject"))
            {
                GenerateAndUpdateVisual(UUID, customName, localCRS_pos, localCRS_rot);
            }
            GUI.backgroundColor = ori;
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Space();

            // ---------------------
            // Params
            // ---------------------
            type = (Trackable.TrackableTypeEnum)EditorGUILayout.EnumPopup("Trackable Type:", type);
            unit = (UnitSystem)EditorGUILayout.EnumPopup("Unit System:", unit);

            EditorGUILayout.Space();
            trackableSize = EditorGUILayout.Vector3Field("Trackable Size:", trackableSize);

            EditorGUILayout.Space();
            GUILayout.Label("Local CRS:");
            localCRS_pos = EditorGUILayout.Vector3Field("   Position:", localCRS_pos);
            localCRS_rot = EditorGUILayout.Vector3Field("   Rotation:", localCRS_rot);

            EditorGUILayout.Space();
            if (GUILayout.Button("Generate Dummy Payload"))
            {
                // dummy
                trackablePayload = new byte[100];
                for (int i = 0; i < trackablePayload.Length; i++)
                {
                    trackablePayload[i] = (byte)i;
                }
            }

            EditorGUILayout.Space();
            groupEnabled = EditorGUILayout.BeginToggleGroup("Optional Parameters:", groupEnabled);
            key1 = EditorGUILayout.TextField("Key 1", key1);
            value1 = EditorGUILayout.TextField("Value 1", value1);
            EditorGUILayout.EndToggleGroup();
            //
            GUILayout.EndVertical();
        }

        private void GetTrackableParams()
@@ -258,13 +261,10 @@ namespace ETSI.ARF.WorldStorage.UI
                trackableSize = new Vector3((float)obj.TrackableSize[0], (float)obj.TrackableSize[1], (float)obj.TrackableSize[2]);
            }
            else trackableSize = Vector3.zero;

            if (obj.LocalCRS.Count == 16)
            {
                Matrix4x4 localCRS = new Matrix4x4();
                localCRS.m00 = obj.LocalCRS[0]; localCRS.m01 = obj.LocalCRS[1]; localCRS.m02 = obj.LocalCRS[2]; localCRS.m03 = obj.LocalCRS[3];
                localCRS.m10 = obj.LocalCRS[4]; localCRS.m11 = obj.LocalCRS[5]; localCRS.m12 = obj.LocalCRS[6]; localCRS.m13 = obj.LocalCRS[7];
                localCRS.m20 = obj.LocalCRS[8]; localCRS.m21 = obj.LocalCRS[9]; localCRS.m22 = obj.LocalCRS[10]; localCRS.m23 = obj.LocalCRS[11];
                localCRS.m30 = obj.LocalCRS[12]; localCRS.m31 = obj.LocalCRS[13]; localCRS.m32 = obj.LocalCRS[14]; localCRS.m33 = obj.LocalCRS[15];
                Matrix4x4 localCRS = WorldStorageWindow.MatrixFromLocalCRS(obj.LocalCRS); 
                localCRS_pos = localCRS.GetPosition();
                localCRS_rot = localCRS.rotation.eulerAngles;
            }
@@ -273,8 +273,13 @@ namespace ETSI.ARF.WorldStorage.UI
                localCRS_pos = Vector3.zero;
                localCRS_rot = Vector3.zero;
            }
            keyValueTags = obj.KeyvalueTags;
            this.Repaint(); // TODO

            // Read a key value (demo)
            var first = WorldStorageWindow.GetFirstKeyValueTags(obj.KeyvalueTags);
            key1 = first.Item1;
            value1 = first.Item2;
           
            this.Repaint();
        }

        public Trackable GenerateTrackable()
@@ -302,6 +307,10 @@ namespace ETSI.ARF.WorldStorage.UI
                localCRS.m30,    localCRS.m31,    localCRS.m32,    localCRS.m33,
            };

            // Create a key value (one from demo)
            keyValueTags.Clear();
            keyValueTags.Add(key1, new List<string> { value1 });

            System.Guid _uuid = System.Guid.Parse(UUID);
            System.Guid _creator = System.Guid.Parse(worldStorageUser.UUID);
            Trackable t = new Trackable(_uuid, customName, _creator, type, trackableEncodingInformation, trackablePayload, _localCRS, unit, _trackableSize, keyValueTags);
Loading