Commit 373c7ab3 authored by Nathan Chambron's avatar Nathan Chambron
Browse files

working graphview

parent 15284940
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ namespace Assets.ETSI.ARF.ARF_World_Storage_API.Editor.Graph

        public void clicked()
        {
            Debug.Log(worldLink.ToJson());
            NodeEditorWindow.ShowWindow(this);
        }
    }
+138 −25
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ namespace ETSI.ARF.WorldStorage.UI
            {
                if (SaveInfo.instance.elemsToRemove == null)
                {
                    SaveInfo.instance.elemsToRemove = new List<string>();
                    SaveInfo.instance.elemsToRemove = new Dictionary<string, Type>();
                }
                foreach (GraphElement elt in selection.ToArray())
                {
@@ -86,7 +86,7 @@ namespace ETSI.ARF.WorldStorage.UI
                        nodeAnchor.DisconnectAllPorts(this);
                        if (SaveInfo.instance.nodePositions.ContainsKey(nodeAnchor.GUID))
                        {
                            SaveInfo.instance.elemsToRemove.Add(nodeAnchor.GUID);
                            SaveInfo.instance.elemsToRemove.Add(nodeAnchor.GUID, typeof(WorldAnchor));
                        }
                        RemoveElement(elt);
                        continue;
@@ -97,7 +97,7 @@ namespace ETSI.ARF.WorldStorage.UI
                        nodeTrackable.DisconnectAllPorts(this);
                        if (SaveInfo.instance.nodePositions.ContainsKey(nodeTrackable.GUID))
                        {
                            SaveInfo.instance.elemsToRemove.Add(nodeTrackable.GUID);
                            SaveInfo.instance.elemsToRemove.Add(nodeTrackable.GUID, typeof(Trackable));
                        }
                        RemoveElement(elt);
                        continue;
@@ -107,7 +107,7 @@ namespace ETSI.ARF.WorldStorage.UI
                    {
                        edgeLink.input.Disconnect(edgeLink);
                        edgeLink.output.Disconnect(edgeLink);
                        SaveInfo.instance.elemsToRemove.Add(edgeLink.GUID);
                        SaveInfo.instance.elemsToRemove.Add(edgeLink.GUID, typeof(WorldLink));
                        RemoveElement(elt);
                        continue;
                    }
@@ -123,9 +123,9 @@ namespace ETSI.ARF.WorldStorage.UI
            evt.menu.AppendSeparator();
            evt.menu.AppendAction("Reload graph", delegate
            {
                if (positionshaveBeenChanged() && EditorUtility.DisplayDialog("Saving node positions", "The nodes positions have been changed, would you like to save them ?", "Yes", "No"))
                if (ServerAndLocalDifferent() && EditorUtility.DisplayDialog("Saving node positions", "The World Graph has been modified. \nWould you like to push the modifications to the server ?", "Yes", "No"))
                {
                    saveElemPositionsInServer();
                    saveInServer();
                }
                reload();
                SaveInfo.instance.toReFrame = true;
@@ -185,9 +185,10 @@ namespace ETSI.ARF.WorldStorage.UI
            {
            }
        }
        private bool positionshaveBeenChanged()

        public bool ServerAndLocalDifferent()
        {
            if (SaveInfo.instance.elemsToRemove.Count != 0)
            if ((SaveInfo.instance.elemsToRemove.Count != 0) || (SaveInfo.instance.elemsToUpdate.Count != 0))
            {
                return true;
            }
@@ -195,6 +196,12 @@ namespace ETSI.ARF.WorldStorage.UI
            {
                float nodeX = node.GetPosition().x;
                float nodeY = node.GetPosition().y;
                if (!SaveInfo.instance.nodePositions.ContainsKey(node.GUID))
                {
                    return true;
                }
                else
                {
                    float dataX = SaveInfo.instance.nodePositions[node.GUID].x;
                    float dataY = SaveInfo.instance.nodePositions[node.GUID].y;
                    if ((nodeX != dataX) || (nodeY != dataY))
@@ -202,6 +209,14 @@ namespace ETSI.ARF.WorldStorage.UI
                        return true;
                    }
                }
            }
            foreach (ARFEdgeLink edge in edges)
            {
                if (!SaveInfo.instance.linkIds.Contains(edge.GUID))
                {
                    return true;
                }
            }
            return false;
        }

@@ -225,7 +240,7 @@ namespace ETSI.ARF.WorldStorage.UI
            {
                var waNode = new ARFNodeWorldAnchor(worldAnchor);

                Rect posTemp = new Rect(26, 93, 160, 77);
                Rect posTemp = new(26, 93, 160, 77);
                SaveInfo.instance.nodePositions.TryGetValue(worldAnchor.UUID.ToString(), out posTemp);
                waNode.SetPosition(posTemp);

@@ -236,7 +251,7 @@ namespace ETSI.ARF.WorldStorage.UI
            {
                var tracknode = new ARFNodeTrackable(trackable);

                Rect posTemp = new Rect(26, 93, 160, 77);
                Rect posTemp = new(26, 93, 160, 77);
                SaveInfo.instance.nodePositions.TryGetValue(trackable.UUID.ToString(), out posTemp);
                tracknode.SetPosition(posTemp);

@@ -427,14 +442,64 @@ namespace ETSI.ARF.WorldStorage.UI
            return a = Mathf.Round(a * 2f) * 0.5f;
        }

        public void saveElemPositionsInServer()
        //Save all modified/deleted/added elements to the server
        public void saveInServer()
        {
            foreach (ARFNode node in nodes)
            {
                if (!SaveInfo.instance.nodePositions.ContainsKey(node.GUID))
                {
                    //TODO
                    Debug.Log("need to post " + node.GUID);
                    //POST TRACKABLE
                    if (node is ARFNodeTrackable aRFNodeTrackable)
                    {
                        var posX = new List<String>();
                        posX.Add(aRFNodeTrackable.GetPosition().x.ToString());
                        var posY = new List<String>();
                        posY.Add(aRFNodeTrackable.GetPosition().y.ToString());
                        Trackable trackable = aRFNodeTrackable.trackable;
                        trackable.KeyvalueTags["unityAuthoringPosX"] = posX;
                        trackable.KeyvalueTags["unityAuthoringPosY"] = posY;
                        String uuid = TrackableRequest.AddTrackable(worldStorageServer, trackable);

                        //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid
                        uuid = uuid.Replace("\"", "");
                        foreach (ARFEdgeLink edge in aRFNodeTrackable.portIn.connections)
                        {
                            edge.worldLink.UUIDTo = Guid.Parse(uuid);
                        }
                        foreach (ARFEdgeLink edge in aRFNodeTrackable.portOut.connections)
                        {
                            edge.worldLink.UUIDFrom = Guid.Parse(uuid);
                        }
                        aRFNodeTrackable.trackable.UUID = Guid.Parse(uuid);
                        aRFNodeTrackable.GUID = uuid;
                    }
                    //POST WORLDANCHOR
                    if (node is ARFNodeWorldAnchor aRFNodeWorldAnchor)
                    {
                        var posX = new List<String>();
                        posX.Add(aRFNodeWorldAnchor.GetPosition().x.ToString());
                        var posY = new List<String>();
                        posY.Add(aRFNodeWorldAnchor.GetPosition().y.ToString());
                        WorldAnchor worldAnchor = aRFNodeWorldAnchor.worldAnchor;
                        worldAnchor.KeyvalueTags["unityAuthoringPosX"] = posX;
                        worldAnchor.KeyvalueTags["unityAuthoringPosY"] = posY;

                        String uuid = WorldAnchorRequest.AddWorldAnchor(worldStorageServer, worldAnchor);

                        //change the uuid in its edges, if there is a new edge to be added in the world storage it needs to have the correct uuid
                        uuid = uuid.Replace("\"","");
                        foreach (ARFEdgeLink edge in aRFNodeWorldAnchor.portIn.connections)
                        {
                            edge.worldLink.UUIDTo = Guid.Parse(uuid);
                        }
                        foreach (ARFEdgeLink edge in aRFNodeWorldAnchor.portOut.connections)
                        {
                            edge.worldLink.UUIDFrom = Guid.Parse(uuid);
                        }
                        aRFNodeWorldAnchor.worldAnchor.UUID = Guid.Parse(uuid);
                        aRFNodeWorldAnchor.GUID = uuid;
                    }
                }
                else
                {
@@ -442,26 +507,74 @@ namespace ETSI.ARF.WorldStorage.UI
                    float yLocal = node.GetPosition().y;
                    float xServer = SaveInfo.instance.nodePositions[node.GUID].x; ;
                    float yServer = SaveInfo.instance.nodePositions[node.GUID].y;
                    if ((xLocal != xServer) && (yLocal != yServer))
                    if (((xLocal != xServer) || (yLocal != yServer)) || SaveInfo.instance.elemsToUpdate.Contains(node.GUID))
                    {
                        //TODO
                        Debug.Log("need to update " + node.GUID);
                        if(node is ARFNodeTrackable aRFNodeTrackable)
                        {
                            var posX = new List<String>();
                            posX.Add(aRFNodeTrackable.GetPosition().x.ToString());
                            var posY = new List<String>();
                            posY.Add(aRFNodeTrackable.GetPosition().y.ToString());
                            Trackable trackable = aRFNodeTrackable.trackable;
                            trackable.KeyvalueTags["unityAuthoringPosX"] = posX;
                            trackable.KeyvalueTags["unityAuthoringPosY"] = posY;
                            TrackableRequest.UpdateTrackable(worldStorageServer, trackable);
                        }
                        if (node is ARFNodeWorldAnchor aRFNodeWorldAnchor)
                        {
                            var posX = new List<String>();
                            posX.Add(aRFNodeWorldAnchor.GetPosition().x.ToString());
                            var posY = new List<String>();
                            posY.Add(aRFNodeWorldAnchor.GetPosition().y.ToString());
                            WorldAnchor worldAnchor = aRFNodeWorldAnchor.worldAnchor;
                            worldAnchor.KeyvalueTags["unityAuthoringPosX"] = posX;
                            worldAnchor.KeyvalueTags["unityAuthoringPosY"] = posY;
                            WorldAnchorRequest.UpdateWorldAnchor(worldStorageServer, worldAnchor);
                        }
                    }
                }
            }
            foreach (ARFEdgeLink edge in edges)
            {
                if (!SaveInfo.instance.linkIds.Contains(edge.GUID))
                if (edge is ARFEdgeLink aRFEdgeLink)
                {
                    if (!SaveInfo.instance.linkIds.Contains(aRFEdgeLink.GUID))
                    {
                    //TODO
                    Debug.Log("need to post link between " + edge.input);
                        WorldLink worldLink = aRFEdgeLink.worldLink;
                        string uuid = WorldLinkRequest.AddWorldLink(worldStorageServer, worldLink);
                        uuid = uuid.Replace("\"", "");

                        aRFEdgeLink.worldLink.UUID = Guid.Parse(uuid);
                        aRFEdgeLink.GUID = uuid;
                    }
                    else if (SaveInfo.instance.elemsToUpdate.Contains(aRFEdgeLink.GUID))
                    {
                        WorldLink worldLink = aRFEdgeLink.worldLink;
                        WorldLinkRequest.UpdateWorldLink(worldStorageServer, worldLink);
                    }
                }
            foreach (String elemId in SaveInfo.instance.elemsToRemove)
            }
            //DELETE ELEMENTS FROM THE SERVER
            foreach (KeyValuePair<String, Type> elemToRemove in SaveInfo.instance.elemsToRemove)
            {
                string typeName = elemToRemove.Value.Name;
                switch (typeName)
                {
                //TODO
                Debug.Log("need to remove " + elemId);
                    case nameof(Trackable):
                        TrackableRequest.DeleteTrackable(worldStorageServer, elemToRemove.Key);
                        break;
                    case nameof(WorldAnchor):
                        WorldAnchorRequest.DeleteWorldAnchor(worldStorageServer, elemToRemove.Key);
                        break;
                    case nameof(WorldLink):
                        WorldLinkRequest.DeleteWorldLink(worldStorageServer, elemToRemove.Key);
                        break;
                    default:
                        Debug.Log("oops");
                        break;
                }
            }
            SaveInfo.instance.initNodePos(worldStorageServer, worldStorageUser);
        }
    }
}
 No newline at end of file
+7 −6
Original line number Diff line number Diff line
@@ -39,27 +39,26 @@ using System;

namespace ETSI.ARF.WorldStorage.UI
{
    public class ARFNode : Node
    public abstract class ARFNode : Node
    {
        public string GUID;
        public bool entryPoint = false;
        public Port portOut;
        public Port portIn;
        public ARFPort portOut;
        public ARFPort portIn;
        public GUID id;
        public ARFNode()
        {
            
        }

        public override Port InstantiatePort(Orientation orientation, Direction direction, Port.Capacity capacity, Type type)
        {
            switch (direction)
            {
                case Direction.Input:
                    portIn = Port.Create<ARFEdgeLink>(orientation, direction, capacity, type);
                    portIn = ARFPort.CreateARF<ARFEdgeLink>(orientation, direction, capacity, type);
                    return portIn;
                case Direction.Output:
                    portOut = Port.Create<ARFEdgeLink>(orientation, direction, capacity, type);
                    portOut = ARFPort.CreateARF<ARFEdgeLink>(orientation, direction, capacity, type);
                    return portOut;
                default:
                    return null;
@@ -99,5 +98,7 @@ namespace ETSI.ARF.WorldStorage.UI
        {
            return node.InstantiatePort(Orientation.Horizontal, portDirection, capacity, typeof(int)); // dummy
        }

        public abstract ObjectType GetElemType();
    }
}
 No newline at end of file
+6 −2
Original line number Diff line number Diff line
@@ -60,13 +60,13 @@ namespace ETSI.ARF.WorldStorage.UI
            var portIn = GeneratePort(this, Direction.Input, Port.Capacity.Multi);
            portIn.portColor = new Color(0.77f, 0.77f, 0.77f, 0.77f);
            portIn.portName = "Target"; // "Input"
            portIn.AddManipulator(new EdgeConnector<ARFEdgeLink>(new WorldLinkListener()));
            //portIn.AddManipulator(new EdgeConnector<ARFEdgeLink>(new WorldLinkListener()));
            inputContainer.Add(portIn);

            var portOut = GeneratePort(this, Direction.Output, Port.Capacity.Multi);
            portOut.portColor = new Color(0.77f, 0.77f, 0.77f, 0.77f);
            portOut.portName = "Source"; // "Output";
            portOut.AddManipulator(new EdgeConnector<ARFEdgeLink>(new WorldLinkListener())); ;
            //portOut.AddManipulator(new EdgeConnector<ARFEdgeLink>(new WorldLinkListener())); ;
            outputContainer.Add(portOut);

            RefreshExpandedState();
@@ -84,5 +84,9 @@ namespace ETSI.ARF.WorldStorage.UI
            NodeEditorWindow.ShowWindow(this);
            Debug.Log(trackable.ToString());
        }
        public override ObjectType GetElemType()
        {
            return ObjectType.Trackable;
        }
    }
}
 No newline at end of file
+6 −2
Original line number Diff line number Diff line
@@ -60,13 +60,13 @@ namespace ETSI.ARF.WorldStorage.UI
            var portIn = GeneratePort(this, Direction.Input, Port.Capacity.Multi);
            portIn.portColor = new Color(0.77f,0.77f,0.77f, 0.77f);
            portIn.portName = "Target"; // "Input";
            portIn.AddManipulator(new EdgeConnector<ARFEdgeLink>(new WorldLinkListener()));
            //portIn.AddManipulator(new EdgeConnector<ARFEdgeLink>(new WorldLinkListener()));
            inputContainer.Add(portIn);

            var portOut = GeneratePort(this, Direction.Output, Port.Capacity.Multi);
            portOut.portColor = new Color(0.77f, 0.77f, 0.77f, 0.77f);
            portOut.portName = "Source"; // "Output";
            portOut.AddManipulator(new EdgeConnector<ARFEdgeLink>(new WorldLinkListener()));
            //portOut.AddManipulator(new EdgeConnector<ARFEdgeLink>(new WorldLinkListener()));
            outputContainer.Add(portOut);

            RefreshExpandedState();
@@ -84,5 +84,9 @@ namespace ETSI.ARF.WorldStorage.UI
            Debug.Log(worldAnchor.ToString());
            NodeEditorWindow.ShowWindow(this);
        }
        public override ObjectType GetElemType()
        {
            return ObjectType.WorldAnchor;
        }
    }
}
 No newline at end of file
Loading