private GameObject CreateLink(LinksStructure link)
    {
        GameObject lineobject = new GameObject("line");

        lineobject.AddComponent <LineRenderer>();
        lineobject.transform.SetParent(graphContainer, false);
        LineRenderer line = lineobject.GetComponent <LineRenderer>();

        line.sortingOrder  = -9;
        line.useWorldSpace = false;
        line.motionVectors = false;
        line.material      = new Material(Shader.Find("Sprites/Default"));
        line.SetColors(new Color(1, 1, 1, lineAlpha), new Color(1, 1, 1, lineAlpha));



        float x0    = (float)link.SourceNode.x1;
        float x1    = (float)link.TargetNode.x0;
        float y0    = (float)link.y0;
        float y1    = (float)link.y1;
        float width = (float)link.width;
        /*Debug.Log(width + " " + Node.TargetLinks[z].SourceNode.name);*/
        Vector2 n1 = new Vector2(x0, y0);
        Vector2 n2 = new Vector2((x0 + x1) / 2, y0);
        Vector2 n3 = new Vector2((x0 + x1) / 2, y1);
        Vector2 n4 = new Vector2(x1, y1);

        DrawLinearCurve(line, n1, n2, n3, n4, width);
        return(lineobject);
    }
 int ascendingTargetBreadth(LinksStructure a, LinksStructure b)
 {
     if (ascendingBreadth(a.TargetNode, b.TargetNode) == 0)
     {
         return(a.index - b.index);
     }
     return(ascendingBreadth(a.TargetNode, b.TargetNode));
     /* || a.index - b.index;*/
 }
 int  ascendingSourceBreadth(LinksStructure a, LinksStructure b)
 {
     if (ascendingBreadth(a.SourceNode, b.SourceNode) == 0)
     {
         return(a.index - b.index);
     }
     return(ascendingBreadth(a.SourceNode, b.SourceNode));
     /*|| a.index - b.index;*/
 }
    public List <GameObject> AddGraphLineVisual(string tooltipText, LinksStructure a)
    {
        GameObject        lineGameObject = CreateLink(a);
        List <GameObject> temp           = AddCollider(6, lineGameObject, tooltipText);

        return(new List <GameObject>()
        {
            lineGameObject
        });
    }
    private void upDateLine(string tooltipText, LinksStructure a, int i, NodesStructure[] NodesStructures)
    {
        GameObject   lineobject = GameLineObjectList[i].gameObject;
        LineRenderer line       = lineobject.GetComponent <LineRenderer>();

        foreach (var node in NodesStructures)
        {
            double ya = node.y0;
            double yb = ya;
            foreach (var link in node.SourceLinks)
            {
                link.y0 = ya + link.width / 2;
                ya     += link.width;
            }
            foreach (var link in node.TargetLinks)
            {
                link.y1 = yb + link.width / 2;
                yb     += link.width;
            }
        }



        float x0    = (float)a.SourceNode.x1;
        float x1    = (float)a.TargetNode.x0;
        float y0    = (float)a.y0;
        float y1    = (float)a.y1;
        float width = (float)a.width;
        /*Debug.Log(width + " " + Node.TargetLinks[z].SourceNode.name);*/
        Vector2 n1 = new Vector2(x0, y0);
        Vector2 n2 = new Vector2((x0 + x1) / 2, y0);
        Vector2 n3 = new Vector2((x0 + x1) / 2, y1);
        Vector2 n4 = new Vector2(x1, y1);

        DrawLinearCurve(line, n1, n2, n3, n4, width);
        updateCollider(6, lineobject, tooltipText);
    }
    public void loadDate(string transportFilepath)
    {
        Boolean FileRightFlag = true;

        graphContainer = transform.parent.gameObject.GetComponent <RectTransform>();
        x0             = 10;
        y0             = 10;
        x1             = x0 + graphContainer.sizeDelta.x - 10;
        y1             = graphContainer.sizeDelta.y + y0 - 20;
        string filepath = "";

        if (transportFilepath != "")
        {
            filepath = transportFilepath;
            if (filepath != "")
            {
                if (!filepath.EndsWith(".json"))
                {
                    Debug.Log(filepath + " is not a json file");
                    FileRightFlag = false;
                }
            }
        }
        else
        {
            if (jsFile != null)
            {
                if (transportFilepath == "")
                {
                    filepath = UnityEditor.AssetDatabase.GetAssetPath(jsFile);
                }
                if (!filepath.EndsWith(".json"))
                {
                    Debug.Log(filepath + " is not a json file");
                    FileRightFlag = false;
                }
            }
        }
        if (filepath != "" && FileRightFlag == true)
        {
            StreamReader streamreader = new StreamReader(filepath);
            JsonReader   js           = new JsonReader(streamreader);
            Root         r            = JsonMapper.ToObject <Root>(js);
            NodesStructures = new NodesStructure[r.nodes.Count];
            for (int i = 0; i < r.nodes.Count; i++)
            {
                NodesStructures[i]             = new NodesStructure();
                NodesStructures[i].name        = r.nodes[i].name;
                NodesStructures[i].layer       = 999;
                NodesStructures[i].index       = i;
                NodesStructures[i].SourceLinks = new List <LinksStructure>();
                NodesStructures[i].TargetLinks = new List <LinksStructure>();
            }
            LinksStructures = new LinksStructure[r.links.Count];
            for (int i = 0; i < r.links.Count; i++)
            {
                /*            NodesStructures[r.links[i].target].addTargetLink(r.links[i].source, r.links[i].target, r.links[i].value,i);
                 *          NodesStructures[r.links[i].source].addSourceLink(r.links[i].source, r.links[i].target, r.links[i].value,i);*/
                LinksStructures[i]            = new LinksStructure();
                LinksStructures[i].value      = r.links[i].value;
                LinksStructures[i].index      = i;
                LinksStructures[i].SourceNode = NodesStructures[r.links[i].source];
                LinksStructures[i].TargetNode = NodesStructures[r.links[i].target];
                NodesStructures[r.links[i].source].SourceLinks.Add(LinksStructures[i]);
                NodesStructures[r.links[i].target].TargetLinks.Add(LinksStructures[i]);
            }
            if (linkSort != null)
            {
                for (int i = 0; i < NodesStructures.Length; i++)
                {
                    NodesStructures[i].SourceLinks.Sort((IComparer <LinksStructure>)linkSort);
                    NodesStructures[i].TargetLinks.Sort((IComparer <LinksStructure>)linkSort);
                }
            }
            for (int i = 0; i < NodesStructures.Length; i++)
            {
                NodesStructures[i].getvalue();
            }
            ComputeNodeHeights();
            ComputeNodeDepths();

            ComputeNodeBreadths();
            computeLinkBreadths();
            Debug.Log("--------------------------------");
            for (int i = 0; i < NodesStructures.Length; i++)
            {
                NodesStructures[i].tostring();
            }

            gameObject.SetActive(false);
            gameObject.transform.parent.GetComponent <NodeShow>().reloadFlag = true;
        }
    }
    public void loadHtmlData(string JsonContent)
    {
        if (JsonContent == "")
        {
            Debug.Log("Online Json file is null");
        }
        else
        {
            JsonReader js = new JsonReader(new StringReader(JsonContent));
            Root       r  = JsonMapper.ToObject <Root>(js);
            NodesStructures = new NodesStructure[r.nodes.Count];
            for (int i = 0; i < r.nodes.Count; i++)
            {
                NodesStructures[i]             = new NodesStructure();
                NodesStructures[i].name        = r.nodes[i].name;
                NodesStructures[i].layer       = 999;
                NodesStructures[i].index       = i;
                NodesStructures[i].SourceLinks = new List <LinksStructure>();
                NodesStructures[i].TargetLinks = new List <LinksStructure>();
            }
            LinksStructures = new LinksStructure[r.links.Count];
            for (int i = 0; i < r.links.Count; i++)
            {
                /*            NodesStructures[r.links[i].target].addTargetLink(r.links[i].source, r.links[i].target, r.links[i].value,i);
                 *          NodesStructures[r.links[i].source].addSourceLink(r.links[i].source, r.links[i].target, r.links[i].value,i);*/
                LinksStructures[i]            = new LinksStructure();
                LinksStructures[i].value      = r.links[i].value;
                LinksStructures[i].index      = i;
                LinksStructures[i].SourceNode = NodesStructures[r.links[i].source];
                LinksStructures[i].TargetNode = NodesStructures[r.links[i].target];
                NodesStructures[r.links[i].source].SourceLinks.Add(LinksStructures[i]);
                NodesStructures[r.links[i].target].TargetLinks.Add(LinksStructures[i]);
            }
            if (linkSort != null)
            {
                for (int i = 0; i < NodesStructures.Length; i++)
                {
                    NodesStructures[i].SourceLinks.Sort((IComparer <LinksStructure>)linkSort);
                    NodesStructures[i].TargetLinks.Sort((IComparer <LinksStructure>)linkSort);
                }
            }
            for (int i = 0; i < NodesStructures.Length; i++)
            {
                NodesStructures[i].getvalue();
            }
            ComputeNodeHeights();
            ComputeNodeDepths();

            ComputeNodeBreadths();
            computeLinkBreadths();

            /*        Debug.Log("--------------------------------");
             *      for (int i = 0; i < NodesStructures.Length; i++)
             *      {
             *          NodesStructures[i].tostring();
             *      }*/

            gameObject.SetActive(false);
            gameObject.transform.parent.GetComponent <NodeShow>().reloadFlag = true;
        }
    }