Example #1
0
        private void InitializeGraph(GeneratingMethodEnum generatingMethod)
        {
            Graphs.Add(new Graph {
                Origin = _graph.Origin, Points = _graph.Points
            });

            IHull hull = null;

            switch (generatingMethod)
            {
            case GeneratingMethodEnum.SerialQuickHull:
                hull = new SerialQuickHull((Graph)Graphs.Last());
                break;

            case GeneratingMethodEnum.OneThreadPerSplitQuickHull:
                hull = new OneThreadPerSplitQuickHull((Graph)Graphs.Last());
                break;

            case GeneratingMethodEnum.OneThreadSplitQuickHull:
                hull = new OneThreadSplitQuickHull((Graph)Graphs.Last());
                break;

            case GeneratingMethodEnum.SerialGiftWrapping:
                hull = new SerialGiftWrapping((Graph)Graphs.Last());
                break;

            default:
                break;
            }

            _graph.Name = generatingMethod.ToString();
            hull.Done  += Done;
            hull.Execute();
            Hulls.Add(hull);
        }
Example #2
0
        /// <summary>
        /// Create and add a new graph to the ending to run graph processes.
        /// </summary>
        /// <param name="graphName">Unique user-friendly name for the graph.</param>
        /// <returns>Use methods on the returned object to create graph processes.</returns>
        public RFGraphDefinition CreateGraph(string graphName)
        {
            var newGraph = new RFGraphDefinition(graphName, this);

            Graphs.Add(graphName, newGraph);
            return(newGraph);
        }
Example #3
0
        /// <summary>
        /// Adds a graph to the DiagramNode
        /// </summary>
        public void AddGraph()
        {
            var graph = new DiagramGraph {
                Video = ChosenVideo.Item2
            };

            NodeModel.Graphs.Add(graph);
            Graphs.Add(new DiagramGraphViewModel(graph, this));
            NotifyOfPropertyChange(() => Lines);
        }
        private void CalculateGraphs(ChartSettings settings)
        {
            Graphs.Clear();
            foreach (var element in settings.Lines)
            {
                double volume = element.Volume * m_parameters.LotSize;

                Graph graph = new Graph(volume, m_quotes);
                Graphs.Add(graph);
            }
        }
        public override void InitTask()
        {
            var track = new GameObject("Track").AddComponent <TrackController>();

            track.Positions = new[] { new Vector3(0, 0, 0), new Vector3(0, 0, 10), new Vector3(0, 20, 20), new Vector3(-10, 30, 30), new Vector3(-10, 60, 30), new Vector3(0, 40, 35) };
            track.Scale     = Vector3.one * 2;
            track.UpdateTrack();
            Graphs.Add(track);
            var player = CreatePlayer();

            player.SetupParams(new PlayerParameters(new Vector3(0, 0, -10), Vector3.zero, SceneParametersContainer.PlayerSpeed, isVR: SceneParametersContainer.IsVR));
        }
        public GPUGraphData Retrieve(string key, float value)
        {
            GPUGraphData graphData;

            // If we don't have data with that key
            if (!Graphs.TryGetValue(key, out graphData))
            {
                // Allocate this graph
                graphData      = new GPUGraphData();
                graphData.Name = key;

                // insert this new graph into dictionary
                Graphs.Add(key, graphData);
            }

            return(graphData);
        }
        public virtual void SetupParams(SceneParameters parameters)
        {
            foreach (var(graphType, graphParameters) in parameters.GraphsParameters)
            {
                var graph = new GameObject("Graph").AddComponent(graphType);
                Graphs.Add((AbstractGraph)graph);
                CustomizableExtension.CallSetUpParams(graph, graphParameters);
            }

            foreach (var(playerType, playerParameters) in parameters.PlayersParameters)
            {
                //ToDo : Think about how to handle the player type
                //var player = new GameObject("Player").AddComponent(playerType);
                var player = CreatePlayer();
                CustomizableExtension.CallSetUpParams(player, playerParameters);
            }
        }
Example #8
0
        public GraphForBillboardVertexes CreateGraph()
        {
            var graph          = new GameObject("Graph");
            var graphControler = graph.AddComponent <GraphForBillboardVertexes>();

            Graphs.Add(graphControler);
            graphControler.SetupParams(new GraphParameters(new Vector3(0, -20), "Test"));

            var customFont  = FontsGenerator.GetOrCreateFont("Broadway", 32);
            var mainTexture = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_mainTexture), 200, 200);

            mainTexture.name = "Target";
            var selectFrame = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_selectFrameTexture), 200, 200);

            selectFrame.name = "SelectFrame";

            var textTextureFactory = new TextTextureFactory(customFont, 0);

            var baseScale = Vector2.one;

            var imageParameters       = new BillboardParameters(mainTexture, scale: baseScale * 3f, useCache: true);
            var selectFrameParameters = new BillboardParameters(selectFrame, scale: baseScale * 6f, isMonoColor: true, useCache: false);

            var edgeParameters = new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.white, true), new SpringParameters(1, 10));

            BillboardVertex?vertex = null;

            for (var i = 0; i < 1000; ++i)
            {
                var         text           = textTextureFactory.MakeTextTexture($"Vertex{i}", true);
                const float scale          = 10;
                var         textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale));

                var currentVertex = graphControler.SpawnVertex <SelectableVertex, SelectableVertexParameters>(
                    new SelectableVertexParameters(new[] { imageParameters, textParameters }, selectFrameParameters, new Vector3(i % 32 * 10, i / 32 * 10)));

                if (vertex != null)
                {
                    currentVertex.Link <StretchableEdge, StretchableEdgeParameters>(vertex, edgeParameters);
                }
                vertex = currentVertex;
            }

            return(graphControler);
        }
Example #9
0
 public void ConstructGraphs()
 {
     Logger.Common("Loading graphs...");
     foreach (string jobName in GetEtlJobs())
     {
         try
         {
             Graph graph = Maime.CreateGraph(jobName);
             Graphs.Add(new GraphInfo(graph, jobName));
         }
         catch (NotImplementedException e)
         {
             Logger.Error($"{jobName} includes a non supported transformation.");
         }
     }
     Logger.Common("Finished loading graphs.");
     _canRepairStart = true;
 }
        // NOTE: This method is invoked from DependencyVisualiser.xaml
        public void BuildGraphs()
        {
            Graphs.Clear();

            var repo      = ResourceModel.Environment.ResourceRepository;
            var graphData = repo.GetDependenciesXml(ResourceModel, GetDependsOnMe);

            if (graphData == null)
            {
                throw new Exception(string.Format(GlobalConstants.NetworkCommunicationErrorTextFormat, "GetDependenciesXml"));
            }

            var graphGenerator = new DependencyGraphGenerator();

            var graph = graphGenerator.BuildGraph(graphData.Message, ResourceModel.ResourceName, AvailableWidth, AvailableHeight);

            Graphs.Add(graph);
        }
        public override void InitTask()
        {
            var player     = CreatePlayer();
            var toolConfig = new ToolConfig(typeof(LayoutTool), new ToolParams());

            player.SetupParams(new PlayerParameters(new Vector3(0, 0, -1050), Vector3.zero, SceneParametersContainer.PlayerSpeed, 20, sceneInfo: "Social interactions", isVR: SceneParametersContainer.IsVR, toolConfigs: new[] { toolConfig }));
            {
                var graph          = new GameObject("Social interactions");
                var graphControler = graph.AddComponent <GraphForBillboardVertexes>();
                Graphs.Add(graphControler);
                var edges = new List <AdjacencyListBaseGenerator.AdjacencyInfo>(5000);

                const int vertCount  = 500;
                const int sibCount   = 10;
                const int enemyCount = 2;
                for (var i = 0; i < vertCount; ++i)
                {
                    for (var j = 0; j < Random.Range(0, sibCount + 1); ++j)
                    {
                        var sibId = Random.Range(0, vertCount);
                        while (sibId == i)
                        {
                            sibId = Random.Range(0, vertCount);
                        }
                        edges.Add(new AdjacencyListBaseGenerator.AdjacencyInfo(i.ToString(), sibId.ToString(), true, 100, 10, Color.blue));
                    }

                    for (var j = 0; j < Random.Range(0, enemyCount + 1); ++j)
                    {
                        var sibId = Random.Range(0, vertCount);
                        while (sibId == i)
                        {
                            sibId = Random.Range(0, vertCount);
                        }
                        edges.Add(new AdjacencyListBaseGenerator.AdjacencyInfo(i.ToString(), sibId.ToString(), true, 1000, 15, Color.red));
                    }
                }
                graphControler.SetupParams(new GraphParameters(Vector3.zero, "Social interactions"));
                var generator = new AdjacencyListBaseGenerator(edges, new RandomPlaceholder(Vector3.one * -2300, Vector3.one * 2300), null, 15);
                generator.Generate(graphControler);
            }
        }
    public override void CreateGraph()
    {
        Console.WriteLine("Directed Graph Generator\n");
        Console.Write("Enter the number of vertices: ");

        int numberOfVertices = Int32.Parse(Console.ReadLine());

        int [,] graph = new int[numberOfVertices, numberOfVertices];

        for (int line = 0; line < graph.GetLength(0); line++)
        {
            for (int column = 0; column < graph.GetLength(1); column++)
            {
                graph[line, column] = new Random().Next(2);
            }
        }
        Console.WriteLine(GetLayoutGraph(graph));

        Graphs.Add(new NewDirectedGraph());
    }
Example #13
0
        public void BuildGraph(string x, string y)
        {
            if (m_Data.Count == 0)
            {
                return;
            }

            if (string.IsNullOrWhiteSpace(x))
            {
                var   points = new PointPairList(new double[m_DataSize], m_Data[y].ToArray());
                Graph graph  = new Graph(points, y + "(" + x + ")", x, y, null, m_Units[y]);
                Graphs.Add(graph);
            }
            else if (m_Data.ContainsKey(x) && m_Data.ContainsKey(y))
            {
                var   points = new PointPairList(m_Data[x].ToArray(), m_Data[y].ToArray());
                Graph graph  = new Graph(points, y + "(" + x + ")", x, y, m_Units[x], m_Units[y]);
                Graphs.Add(graph);
            }
        }
Example #14
0
 private void ReadGraphsFromFile()
 {
     Logger.LogInformation("Reading graphs from file...");
     foreach (string file in Files)
     {
         try
         {
             if (!Graphs.ContainsKey(file))
             {
                 Logger.LogDebug($" - loading '{file}'...");
                 Graphs.Add(file, ReadGraphFromFile(file));
             }
         }
         catch (Exception exception)
         {
             Logger.LogWarning($" ! Error while parsing '{file}': {exception.Message}");
         }
     }
     Logger.LogInformation("Done reading graphs from file.\n");
 }
Example #15
0
 public void AddGraph(Graph chart, List <SeriesDefinition> cache)
 {
     Graphs.Add(new PanelGraph(chart, cache));
 }
Example #16
0
        public override void InitTask()
        {
            var player     = CreatePlayer();
            var toolConfig = new ToolConfig(typeof(ClickTool), new ClickToolParams());

            player.SetupParams(new PlayerParameters(new Vector3(0, 0, -50), Vector3.zero, SceneParametersContainer.PlayerSpeed, sceneInfo: "Hub scene", isVR: SceneParametersContainer.IsVR, toolConfigs: new[] { toolConfig }));

            //ToDo : Replace with auto generation
            var customFont         = FontsGenerator.GetOrCreateFont("Arial", 128);
            var textTextureFactory = new TextTextureFactory(customFont, 0);
            {
                var graph          = new GameObject("Tutorial tasks");
                var graphControler = graph.AddComponent <GraphForBillboardVertexes>();
                graphControler.ColliderEnable = false;
                Graphs.Add(graphControler);
                var baseScale = Vector2.one;
                graphControler.SetupParams(new GraphParameters(new Vector3(-20, 0, 0), "Tutorial tasks"));

                var text             = textTextureFactory.MakeTextTexture("Tools test", true);
                var mainTexture      = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_mainTexture), 400, 400);
                var imageParameters  = new BillboardParameters(mainTexture, Vector4.zero, new Vector2(9, 2), useCache: true);
                var textParameters   = new BillboardParameters(text, Vector4.zero, new Vector2(4, 0.4f), useCache: false, isMonoColor: true, monoColor: Color.white);
                var vertexParameters = new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(-30, 18, 0));
                var toolsTest        = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(vertexParameters);
                toolsTest.gameObject.AddComponent <Button3D>().Action = (gameObject) => SceneLoader.Instance.LoadScene <ToolTestTasks>();

                text             = textTextureFactory.MakeTextTexture("Movement test", true);
                textParameters   = new BillboardParameters(text, Vector4.zero, new Vector2(4, 0.4f), isMonoColor: true, monoColor: Color.white, useCache: false);
                vertexParameters = new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(-20, 9, 0));
                var movementTest = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(vertexParameters);
                movementTest.gameObject.AddComponent <Button3D>().Action = (gameObject) => SceneLoader.Instance.LoadScene <MovementTestTask>();

                movementTest.Link <StretchableEdge, StretchableEdgeParameters>(toolsTest, new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.green), new SpringParameters(1, 5)));
            }

            {
                var graph          = new GameObject("Beautiful scenes");
                var graphControler = graph.AddComponent <GraphForBillboardVertexes>();
                graphControler.ColliderEnable = false;
                Graphs.Add(graphControler);
                var baseScale = Vector2.one;
                graphControler.SetupParams(new GraphParameters(new Vector3(20, 0, 0), "Beautiful scenes"));
                var text             = textTextureFactory.MakeTextTexture("Plants Kingdom", true);
                var mainTexture      = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_mainTexture), 400, 400);
                var imageParameters  = new BillboardParameters(mainTexture, Vector4.zero, new Vector2(9, 2), useCache: true);
                var textParameters   = new BillboardParameters(text, Vector4.zero, new Vector2(4, 0.4f), useCache: false, isMonoColor: true, monoColor: Color.white);
                var vertexParameters = new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(10, 10, 0));
                var v1 = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(vertexParameters);
                v1.gameObject.AddComponent <Button3D>().Action = (gameObject) => SceneLoader.Instance.LoadScene <PlantsKingdom>();

                text             = textTextureFactory.MakeTextTexture("Social graph 1", true);
                textParameters   = new BillboardParameters(text, Vector4.zero, new Vector2(4, 0.4f), isMonoColor: true, monoColor: Color.white, useCache: false);
                vertexParameters = new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(30, 19, 0));
                var v2 = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(vertexParameters);
                v2.gameObject.AddComponent <Button3D>().Action = (gameObject) => SceneLoader.Instance.LoadScene <OneGroupEnemyAndFriendsScene>();

                text             = textTextureFactory.MakeTextTexture("Social graph 2", true);
                textParameters   = new BillboardParameters(text, Vector4.zero, new Vector2(4, 0.4f), isMonoColor: true, monoColor: Color.white, useCache: false);
                vertexParameters = new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(20, 28, 0));
                var v3 = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(vertexParameters);
                v3.gameObject.AddComponent <Button3D>().Action = (gameObject) => SceneLoader.Instance.LoadScene <MultyGroupFriendsScene>();

                v1.Link <StretchableEdge, StretchableEdgeParameters>(v2, new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.green), new SpringParameters(1, 5)));
                v2.Link <StretchableEdge, StretchableEdgeParameters>(v1, new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.green), new SpringParameters(1, 5)));
                v1.Link <StretchableEdge, StretchableEdgeParameters>(v3, new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.green), new SpringParameters(1, 5)));
                v3.Link <StretchableEdge, StretchableEdgeParameters>(v1, new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.green), new SpringParameters(1, 5)));
                v2.Link <StretchableEdge, StretchableEdgeParameters>(v3, new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.green), new SpringParameters(1, 5)));
                v3.Link <StretchableEdge, StretchableEdgeParameters>(v2, new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.green), new SpringParameters(1, 5)));
            }
        }
Example #17
0
        public GraphForBillboardVertexes CreateGraph()
        {
            var graph          = new GameObject("Graph");
            var graphControler = graph.AddComponent <GraphForBillboardVertexes>();
            var graphInfo      = new GraphSerializationInfo()
            {
                VertexInfos = new[]
                {
                    new VertexSerializationInfo(new Vector3(-513, -249.82499313354492f), 15, "Царство: Растения", Color.white),
                    new VertexSerializationInfo(new Vector3(130.5f, 35.92500686645508f), 15, "Отдел: Цветковые", Color.white),
                    new VertexSerializationInfo(new Vector3(523.5f, 270.4500045776367f), 15, "Класс: Двудольные", Color.white),
                    new VertexSerializationInfo(new Vector3(750, 384.4500045776367f), 15, "Порядок: Букоцветные", Color.white),
                    new VertexSerializationInfo(new Vector3(864, 492.4500045776367f), 15, "Семейство: Берёзовые", Color.white),
                    new VertexSerializationInfo(new Vector3(936, 618.4500045776367f), 15, "Род: Берёза", Color.white),
                    new VertexSerializationInfo(new Vector3(1107, 920.1750068664551f), 15, "Вид: Берёза бумажная", Color.white),
                    new VertexSerializationInfo(new Vector3(1118.25f, 740.1750068664551f), 15, "Вид: Берёза вишнёвая", Color.white),
                    new VertexSerializationInfo(new Vector3(1102.5f, 695.1750068664551f), 15, "Вид: Берёза даурская", Color.white),
                    new VertexSerializationInfo(new Vector3(1091.25f, 656.9250068664551f), 15, "Вид: Берёза карликовая", Color.white),
                    new VertexSerializationInfo(new Vector3(1113.75f, 872.9250068664551f), 15, "Вид: Берёза Максимовича", Color.white),
                    new VertexSerializationInfo(new Vector3(1118.25f, 834.6750068664551f), 15, "Вид: Берёза мелколистная", Color.white),
                    new VertexSerializationInfo(new Vector3(1120.5f, 791.9250068664551f), 15, "Вид: Берёза плосколистная", Color.white),
                    new VertexSerializationInfo(new Vector3(1084.5f, 618.6750068664551f), 15, "Вид: Берёза повислая", Color.white),
                    new VertexSerializationInfo(new Vector3(1044, 589.4250068664551f), 15, "Вид: Берёза пушистая", Color.white),
                    new VertexSerializationInfo(new Vector3(1095.75f, 962.9250068664551f), 15, "Вид: Берёза Радде", Color.white),
                    new VertexSerializationInfo(new Vector3(1037.25f, 553.4250068664551f), 15, "Вид: Берёза ребристая", Color.white),
                    new VertexSerializationInfo(new Vector3(1073.25f, 994.4250068664551f), 15, "Вид: Берёза шаровидносерёжковая", Color.white),
                    new VertexSerializationInfo(new Vector3(1041.75f, 1032.675006866455f), 15, "Вид: Берёза шерстистая", Color.white),
                    new VertexSerializationInfo(new Vector3(1003.5f, 1070.925006866455f), 15, "Вид: Берёза Шмидта", Color.white),
                    new VertexSerializationInfo(new Vector3(565.5f, 729.4500045776367f), 15, "Вид: Бересклет бородавчатый", Color.white),
                    new VertexSerializationInfo(new Vector3(517.5f, 388.9500045776367f), 15, "Порядок: Бересклетоцветные", Color.white),
                    new VertexSerializationInfo(new Vector3(513, 489.4500045776367f), 15, "Семейство: Бересклетовые", Color.white),
                    new VertexSerializationInfo(new Vector3(526.5f, 621.4500045776367f), 15, "Род: Бересклет", Color.white),
                    new VertexSerializationInfo(new Vector3(166.5f, 390.4500045776367f), 15, "Порядок: Розоцветные", Color.white),
                    new VertexSerializationInfo(new Vector3(307.5f, 486.4500045776367f), 15, "Семейство: Розовые", Color.white),
                    new VertexSerializationInfo(new Vector3(271.5f, 609.4500045776367f), 15, "Род: Боярышник", Color.white),
                    new VertexSerializationInfo(new Vector3(285, 727.9500045776367f), 15, "Вид: Боярышник кроваво-красный", Color.white),
                    new VertexSerializationInfo(new Vector3(10.5f, 601.9500045776367f), 15, "Род: Слива", Color.white),
                    new VertexSerializationInfo(new Vector3(-1.5f, 727.9500045776367f), 15, "Вид: Вишня обыкновенная", Color.white),
                    new VertexSerializationInfo(new Vector3(46.5f, 801.4500045776367f), 15, "Вид: Вишня сахалинская", Color.white),
                    new VertexSerializationInfo(new Vector3(-88.5f, 480.4500045776367f), 15, "Семейство: Вязовые", Color.white),
                    new VertexSerializationInfo(new Vector3(-181.5f, 595.9500045776367f), 15, "Род: Вяз", Color.white),
                    new VertexSerializationInfo(new Vector3(-240, 723.4500045776367f), 15, "Вид: Вяз гладкий", Color.white),
                    new VertexSerializationInfo(new Vector3(-193.5f, 774.4500045776367f), 15, "Вид: Вяз крупноплодный", Color.white),
                    new VertexSerializationInfo(new Vector3(-150, 811.9500045776367f), 15, "Вид: Вяз малый", Color.white),
                    new VertexSerializationInfo(new Vector3(-252, 841.9500045776367f), 15, "Вид: Вяз приземистый", Color.white),
                    new VertexSerializationInfo(new Vector3(-109.5f, 861.4500045776367f), 15, "Вид: Вяз разрезной", Color.white),
                    new VertexSerializationInfo(new Vector3(-237, 898.9500045776367f), 15, "Вид: Вяз шершавый", Color.white),
                    new VertexSerializationInfo(new Vector3(-265.5f, 678.4500045776367f), 15, "Вид: Вяз эллиптический", Color.white),
                    new VertexSerializationInfo(new Vector3(874.125f, 639.8250045776367f), 15, "Род: Граб", Color.white),
                    new VertexSerializationInfo(new Vector3(910.125f, 759.8250045776367f), 15, "Вид: Граб обыкновенный", Color.white),
                    new VertexSerializationInfo(new Vector3(394.5f, 615.4500045776367f), 15, "Род: Груша", Color.white),
                    new VertexSerializationInfo(new Vector3(412.5f, 777.4500045776367f), 15, "Вид: Груша иволистная", Color.white),
                    new VertexSerializationInfo(new Vector3(468, 846.4500045776367f), 15, "Вид: Груша лохолистная", Color.white),
                    new VertexSerializationInfo(new Vector3(358.5f, 813.4500045776367f), 15, "Вид: Груша обыкновенная", Color.white),
                    new VertexSerializationInfo(new Vector3(706.5f, 508.9500045776367f), 15, "Семейство: Буковые", Color.white),
                    new VertexSerializationInfo(new Vector3(688.5f, 624.4500045776367f), 15, "Род: Дуб", Color.white),
                    new VertexSerializationInfo(new Vector3(714, 777.4500045776367f), 15, "Вид: Дуб зубчатый", Color.white),
                    new VertexSerializationInfo(new Vector3(771, 814.9500045776367f), 15, "Вид: Дуб крупнопыльниковый", Color.white),
                    new VertexSerializationInfo(new Vector3(675, 847.9500045776367f), 15, "Вид: Дуб монгольский", Color.white),
                    new VertexSerializationInfo(new Vector3(624, 793.9500045776367f), 15, "Вид: Дуб скальный", Color.white),
                    new VertexSerializationInfo(new Vector3(838.5f, 870.4500045776367f), 15, "Вид: Дуб черешчатый", Color.white),
                    new VertexSerializationInfo(new Vector3(-877.5f, 26.925006866455078f), 15, "Отдел: Хвойные", Color.white),
                    new VertexSerializationInfo(new Vector3(-1091.25f, 211.42500686645508f), 15, "Класс: Хвойные", Color.white),
                    new VertexSerializationInfo(new Vector3(-1012.5f, 359.9250068664551f), 15, "Порядок: Сосновые", Color.white),
                    new VertexSerializationInfo(new Vector3(-1046.25f, 456.6750068664551f), 15, "Семейство: Сосновые", Color.white),
                    new VertexSerializationInfo(new Vector3(-1048.5f, 566.9250068664551f), 15, "Род: Ель", Color.white),
                    new VertexSerializationInfo(new Vector3(-1037.25f, 659.1750068664551f), 15, "Вид: Ель аянская", Color.white),
                    new VertexSerializationInfo(new Vector3(-987.75f, 690.6750068664551f), 15, "Вид: Ель Глена", Color.white),
                    new VertexSerializationInfo(new Vector3(-1104.75f, 726.6750068664551f), 15, "Вид: Ель корейская", Color.white),
                    new VertexSerializationInfo(new Vector3(-893.25f, 724.4250068664551f), 15, "Вид: Ель обыкновенная", Color.white),
                    new VertexSerializationInfo(new Vector3(-882, 670.4250068664551f), 15, "Вид: Ель сибирская", Color.white),
                    new VertexSerializationInfo(new Vector3(-994.5f, 760.4250068664551f), 15, "Вид: Ель финская", Color.white),
                    new VertexSerializationInfo(new Vector3(-180, 389.1750068664551f), 15, "Порядок: Мальпигиецветные", Color.white),
                    new VertexSerializationInfo(new Vector3(-319.5f, 476.9250068664551f), 15, "Семейство: Ивовые", Color.white),
                    new VertexSerializationInfo(new Vector3(-396, 584.9250068664551f), 15, "Род: ИваVector2.one*5,", Color.white),
                    new VertexSerializationInfo(new Vector3(-506.25f, 668.1750068664551f), 15, "Вид: Ива белая", Color.white),
                    new VertexSerializationInfo(new Vector3(-387, 632.1750068664551f), 15, "Вид: Ива волчниковая", Color.white),
                    new VertexSerializationInfo(new Vector3(-479.25f, 609.6750068664551f), 15, "Вид: Ива козья", Color.white),
                    new VertexSerializationInfo(new Vector3(-452.25f, 749.1750068664551f), 15, "Вид: Ива ломкая", Color.white),
                    new VertexSerializationInfo(new Vector3(-488.25f, 708.6750068664551f), 15, "Вид: Ива остролистная", Color.white),
                    new VertexSerializationInfo(new Vector3(-432, 377.9250068664551f), 15, "Порядок: Бобовоцветные", Color.white),
                    new VertexSerializationInfo(new Vector3(-517.5f, 467.9250068664551f), 15, "Семейство: Бобовые", Color.white),
                    new VertexSerializationInfo(new Vector3(-569.25f, 578.1750068664551f), 15, "Род: Карагана", Color.white),
                    new VertexSerializationInfo(new Vector3(-603, 632.1750068664551f), 15, "Вид: Карагана древовидная", Color.white),
                    new VertexSerializationInfo(new Vector3(-654.75f, 359.9250068664551f), 15, "Порядок: Кизилоцветные", Color.white),
                    new VertexSerializationInfo(new Vector3(-751.5f, 463.4250068664551f), 15, "Семейство: Кизиловые", Color.white),
                    new VertexSerializationInfo(new Vector3(-785.25f, 580.4250068664551f), 15, "Род: Кизил", Color.white),
                    new VertexSerializationInfo(new Vector3(-704.25f, 769.4250068664551f), 15, "Вид: Кизил спорный", Color.white),
                    new VertexSerializationInfo(new Vector3(1100.25f, 393.6750068664551f), 15, "Порядок: Сапиндоцветные", Color.white),
                    new VertexSerializationInfo(new Vector3(1237.5f, 488.1750068664551f), 15, "Семейство: Сапиндовые", Color.white),
                    new VertexSerializationInfo(new Vector3(1264.5f, 625.4250068664551f), 15, "Род: Клён", Color.white),
                    new VertexSerializationInfo(new Vector3(1330.125f, 722.3250045776367f), 15, "Вид: Клён бородатый", Color.white),
                    new VertexSerializationInfo(new Vector3(1327.125f, 767.3250045776367f), 15, "Вид: Клён жёлтый", Color.white),
                    new VertexSerializationInfo(new Vector3(1313.625f, 810.8250045776367f), 15, "Вид: Клён зеленокорый", Color.white),
                    new VertexSerializationInfo(new Vector3(1292.625f, 852.8250045776367f), 15, "Вид: Клён ложнозибольдов", Color.white),
                    new VertexSerializationInfo(new Vector3(1333.125f, 683.3250045776367f), 15, "Вид: Клён маньчжурский", Color.white),
                    new VertexSerializationInfo(new Vector3(1276.125f, 891.8250045776367f), 15, "Вид: Клён остролистный", Color.white),
                    new VertexSerializationInfo(new Vector3(1250.625f, 942.8250045776367f), 15, "Вид: Клён полевой", Color.white),
                    new VertexSerializationInfo(new Vector3(787.125f, 605.3250045776367f), 15, "Род: Лещина", Color.white),
                    new VertexSerializationInfo(new Vector3(827.625f, 672.8250045776367f), 15, "Вид: Лещина обыкновенная", Color.white),
                    new VertexSerializationInfo(new Vector3(1321.125f, 395.3250045776367f), 15, "Порядок: Мальвоцветные", Color.white),
                    new VertexSerializationInfo(new Vector3(1408.125f, 468.8250045776367f), 15, "Семейство: Мальвовые", Color.white),
                    new VertexSerializationInfo(new Vector3(1483.125f, 614.3250045776367f), 15, "Род: Липа", Color.white),
                    new VertexSerializationInfo(new Vector3(1538.625f, 647.3250045776367f), 15, "Вид: Липа европейская", Color.white),
                    new VertexSerializationInfo(new Vector3(1556.625f, 677.3250045776367f), 15, "Вид: Липа крупнолистная", Color.white),
                    new VertexSerializationInfo(new Vector3(1549.125f, 707.3250045776367f), 15, "Вид: Липа Нащокина", Color.white),
                    new VertexSerializationInfo(new Vector3(1531.125f, 743.3250045776367f), 15, "Вид: Липа опушённостолбиковая", Color.white),
                    new VertexSerializationInfo(new Vector3(1508.625f, 771.8250045776367f), 15, "Вид: Липа сердцевидная", Color.white),
                    new VertexSerializationInfo(new Vector3(-1184.25f, 569.3250045776367f), 15, "Род: Лиственница", Color.white),
                    new VertexSerializationInfo(new Vector3(-1319.25f, 590.3250045776367f), 15, "Вид: Лиственница амурская", Color.white),
                    new VertexSerializationInfo(new Vector3(-1304.25f, 621.8250045776367f), 15, "Вид: Лиственница Гмелина", Color.white),
                    new VertexSerializationInfo(new Vector3(-1283.25f, 651.8250045776367f), 15, "Вид: Лиственница камчатская", Color.white),
                    new VertexSerializationInfo(new Vector3(-1260.75f, 681.8250045776367f), 15, "Вид: Лиственница Каяндера", Color.white),
                    new VertexSerializationInfo(new Vector3(-1241.25f, 708.8250045776367f), 15, "Вид: Лиственница Комарова", Color.white),
                    new VertexSerializationInfo(new Vector3(-1236.75f, 740.3250045776367f), 15, "Вид: Лиственница курильская", Color.white),
                    new VertexSerializationInfo(new Vector3(-1328.25f, 543.8250045776367f), 15, "Вид: Лиственница Любарского", Color.white),
                    new VertexSerializationInfo(new Vector3(-1322.25f, 512.3250045776367f), 15, "Вид: Лиственница Миддендорфа", Color.white),
                    new VertexSerializationInfo(new Vector3(-1310.25f, 485.3250045776367f), 15, "Разновидность: Лиственница ольгинская", Color.white),
                },
                EdgeInfos = new[]
                {
                    new EdgeSerializationInfo("0", "1", null, false, 4),
                    new EdgeSerializationInfo("1", "2", null, false, 4),
                    new EdgeSerializationInfo("2", "3", null, false, 4),
                    new EdgeSerializationInfo("3", "4", null, false, 4),
                    new EdgeSerializationInfo("4", "5", null, false, 4),
                    new EdgeSerializationInfo("5", "6", null, false, 4),
                    new EdgeSerializationInfo("5", "7", null, false, 4),
                    new EdgeSerializationInfo("5", "8", null, false, 4),
                    new EdgeSerializationInfo("5", "9", null, false, 4),
                    new EdgeSerializationInfo("5", "10", null, false, 4),
                    new EdgeSerializationInfo("5", "11", null, false, 4),
                    new EdgeSerializationInfo("5", "12", null, false, 4),
                    new EdgeSerializationInfo("13", "5", null, false, 4),
                    new EdgeSerializationInfo("14", "5", null, false, 4),
                    new EdgeSerializationInfo("5", "15", null, false, 4),
                    new EdgeSerializationInfo("5", "16", null, false, 4),
                    new EdgeSerializationInfo("5", "17", null, false, 4),
                    new EdgeSerializationInfo("5", "18", null, false, 4),
                    new EdgeSerializationInfo("5", "19", null, false, 4),
                    new EdgeSerializationInfo("2", "21", null, false, 4),
                    new EdgeSerializationInfo("21", "22", null, false, 4),
                    new EdgeSerializationInfo("22", "23", null, false, 4),
                    new EdgeSerializationInfo("23", "20", null, false, 4),
                    new EdgeSerializationInfo("2", "24", null, false, 4),
                    new EdgeSerializationInfo("24", "25", null, false, 4),
                    new EdgeSerializationInfo("25", "26", null, false, 4),
                    new EdgeSerializationInfo("26", "27", null, false, 4),
                    new EdgeSerializationInfo("25", "28", null, false, 4),
                    new EdgeSerializationInfo("28", "29", null, false, 4),
                    new EdgeSerializationInfo("30", "28", null, false, 4),
                    new EdgeSerializationInfo("24", "31", null, false, 4),
                    new EdgeSerializationInfo("31", "32", null, false, 4),
                    new EdgeSerializationInfo("32", "33", null, false, 4),
                    new EdgeSerializationInfo("32", "34", null, false, 4),
                    new EdgeSerializationInfo("32", "35", null, false, 4),
                    new EdgeSerializationInfo("32", "36", null, false, 4),
                    new EdgeSerializationInfo("32", "37", null, false, 4),
                    new EdgeSerializationInfo("32", "38", null, false, 4),
                    new EdgeSerializationInfo("32", "39", null, false, 4),
                    new EdgeSerializationInfo("4", "40", null, false, 4),
                    new EdgeSerializationInfo("40", "41", null, false, 4),
                    new EdgeSerializationInfo("25", "42", null, false, 4),
                    new EdgeSerializationInfo("42", "43", null, false, 4),
                    new EdgeSerializationInfo("42", "44", null, false, 4),
                    new EdgeSerializationInfo("42", "45", null, false, 4),
                    new EdgeSerializationInfo("3", "46", null, false, 4),
                    new EdgeSerializationInfo("46", "47", null, false, 4),
                    new EdgeSerializationInfo("47", "48", null, false, 4),
                    new EdgeSerializationInfo("47", "49", null, false, 4),
                    new EdgeSerializationInfo("47", "50", null, false, 4),
                    new EdgeSerializationInfo("47", "51", null, false, 4),
                    new EdgeSerializationInfo("47", "52", null, false, 4),
                    new EdgeSerializationInfo("0", "53", null, false, 4),
                    new EdgeSerializationInfo("53", "54", null, false, 4),
                    new EdgeSerializationInfo("54", "55", null, false, 4),
                    new EdgeSerializationInfo("55", "56", null, false, 4),
                    new EdgeSerializationInfo("56", "57", null, false, 4),
                    new EdgeSerializationInfo("58", "57", null, false, 4),
                    new EdgeSerializationInfo("57", "59", null, false, 4),
                    new EdgeSerializationInfo("57", "60", null, false, 4),
                    new EdgeSerializationInfo("57", "61", null, false, 4),
                    new EdgeSerializationInfo("57", "62", null, false, 4),
                    new EdgeSerializationInfo("57", "63", null, false, 4),
                    new EdgeSerializationInfo("2", "64", null, false, 4),
                    new EdgeSerializationInfo("64", "65", null, false, 4),
                    new EdgeSerializationInfo("65", "66", null, false, 4),
                    new EdgeSerializationInfo("66", "67", null, false, 4),
                    new EdgeSerializationInfo("68", "66", null, false, 4),
                    new EdgeSerializationInfo("66", "69", null, false, 4),
                    new EdgeSerializationInfo("66", "70", null, false, 4),
                    new EdgeSerializationInfo("66", "71", null, false, 4),
                    new EdgeSerializationInfo("2", "72", null, false, 4),
                    new EdgeSerializationInfo("72", "73", null, false, 4),
                    new EdgeSerializationInfo("73", "74", null, false, 4),
                    new EdgeSerializationInfo("74", "75", null, false, 4),
                    new EdgeSerializationInfo("2", "76", null, false, 4),
                    new EdgeSerializationInfo("76", "77", null, false, 4),
                    new EdgeSerializationInfo("77", "78", null, false, 4),
                    new EdgeSerializationInfo("78", "79", null, false, 4),
                    new EdgeSerializationInfo("2", "80", null, false, 4),
                    new EdgeSerializationInfo("80", "81", null, false, 4),
                    new EdgeSerializationInfo("81", "82", null, false, 4),
                    new EdgeSerializationInfo("82", "83", null, false, 4),
                    new EdgeSerializationInfo("82", "84", null, false, 4),
                    new EdgeSerializationInfo("82", "85", null, false, 4),
                    new EdgeSerializationInfo("82", "86", null, false, 4),
                    new EdgeSerializationInfo("87", "82", null, false, 4),
                    new EdgeSerializationInfo("82", "88", null, false, 4),
                    new EdgeSerializationInfo("82", "89", null, false, 4),
                    new EdgeSerializationInfo("4", "90", null, false, 4),
                    new EdgeSerializationInfo("90", "91", null, false, 4),
                    new EdgeSerializationInfo("2", "92", null, false, 4),
                    new EdgeSerializationInfo("92", "93", null, false, 4),
                    new EdgeSerializationInfo("93", "94", null, false, 4),
                    new EdgeSerializationInfo("94", "95", null, false, 4),
                    new EdgeSerializationInfo("94", "96", null, false, 4),
                    new EdgeSerializationInfo("94", "97", null, false, 4),
                    new EdgeSerializationInfo("94", "98", null, false, 4),
                    new EdgeSerializationInfo("94", "99", null, false, 4),
                    new EdgeSerializationInfo("56", "100", null, false, 4),
                    new EdgeSerializationInfo("100", "101", null, false, 4),
                    new EdgeSerializationInfo("100", "102", null, false, 4),
                    new EdgeSerializationInfo("100", "103", null, false, 4),
                    new EdgeSerializationInfo("100", "104", null, false, 4),
                    new EdgeSerializationInfo("100", "105", null, false, 4),
                    new EdgeSerializationInfo("100", "106", null, false, 4),
                    new EdgeSerializationInfo("100", "107", null, false, 4),
                    new EdgeSerializationInfo("100", "108", null, false, 4),
                    new EdgeSerializationInfo("100", "109", null, false, 4),
                },
            };

            var lightGenerator = new LightGraphGenerator(graphInfo);

            lightGenerator.Generate(graphControler);
            Graphs.Add(graphControler);
            return(graphControler);
        }
Example #18
0
 public GraphContent AddGraph(GraphContent graph)
 {
     Graphs.Add(graph);
     return(graph);
 }
        public override void InitTask()
        {
            var graph          = new GameObject("Graph");
            var graphControler = graph.AddComponent <GraphForBillboardVertexes>();

            Graphs.Add(graphControler);
            graphControler.SetupParams(new GraphParameters(new Vector3(0, -20), "Test"));

            var customFont  = FontsGenerator.GetOrCreateFont("Arial", 32);
            var mainTexture = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_mainTexture), 800, 800);

            mainTexture.name = "Target";
            var dotTexture = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_mainTexture), 800, 800);

            mainTexture.name = "Dot";
            var selectFrame = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_selectFrameTexture), 800, 800);

            selectFrame.name = "SelectFrame";

            var textTextureFactory = new TextTextureFactory(customFont, 0);

            var baseScale = Vector2.one;

            var         imageParameters       = new BillboardParameters(mainTexture, scale: baseScale * 3f, useCache: true);
            var         selectFrameParameters = new BillboardParameters(selectFrame, scale: baseScale * 6f, isMonoColor: true, useCache: false);
            var         text           = textTextureFactory.MakeTextTexture($"Select Me", true);
            const float scale          = 10;
            var         textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale), isMonoColor: true, monoColor: Color.white);

            _selectableVertex = graphControler.SpawnVertex <SelectableVertex, SelectableVertexParameters>(
                new SelectableVertexParameters(new[] { imageParameters, textParameters }, selectFrameParameters, new Vector3(-20, 20)));

            var dotImageParameters = new BillboardParameters(mainTexture, scale: baseScale * 3f, useCache: true);

            text           = textTextureFactory.MakeTextTexture($"Dot 1", true);
            textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale), isMonoColor: true, monoColor: Color.white);
            _dot1          = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(
                new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(0, 20)));

            text           = textTextureFactory.MakeTextTexture($"Dot 2", true);
            textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale), isMonoColor: true, monoColor: Color.white);
            _dot2          = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(
                new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(20, 20)));

            text           = textTextureFactory.MakeTextTexture($"Move me", true);
            textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale), isMonoColor: true, monoColor: Color.white);
            _moveVertex    = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(
                new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(30, 20, -10)));

            text           = textTextureFactory.MakeTextTexture($"Click me", true);
            textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale), isMonoColor: true, monoColor: Color.white);
            var clickVeretex = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(
                new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(-50, 20, -10)));

            var snowPref = Resources.Load <GameObject>(@"Prefabs\Snowflake");

            clickVeretex.gameObject.AddComponent <Button3D>().Action = (g) => { _clickCount++; Destroy(Instantiate(snowPref, clickVeretex.transform.position, Quaternion.identity), 2); };

            var colors = new List <Color>(7)
            {
                new Color(1f, 0f, 0f),
                new Color(1f, 127f / 255f, 0f),
                new Color(1f, 1f, 0f),
                new Color(0f, 1f, 0f),
                new Color(0f, 0f, 1f),
                new Color(75f / 255f, 0f, 130f / 255f),
                new Color(143f, 0f, 1f),
            };

            var edgeTypes = new List <(Type type, EdgeParameters parameters)>(1)
            {
                (typeof(StretchableEdge), new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.white), new SpringParameters(1, 10)))
            };

            var player = CreatePlayer();

            player.SetupParams(new PlayerParameters(Vector3.zero, Vector3.zero, SceneParametersContainer.PlayerSpeed, 20, isVR: SceneParametersContainer.IsVR,
                                                    new ToolConfig[4]
            {
                new ToolConfig(typeof(SelectItemTool), new SelectItemToolParams(colors)),
                new ToolConfig(typeof(GrabItemTool), new GrabItemToolParams()),
                new ToolConfig(typeof(EdgeCreaterTool), new EdgeCreaterToolParams(edgeTypes)),
                new ToolConfig(typeof(ClickTool), new ClickToolParams())
            }));
        }
 /// <summary>
 ///     Adds the provided graph to the list of displayed graphs
 /// </summary>
 /// <param name="graph"></param>
 public void AddGraph(Graph graph)
 {
     Graphs.Add(graph);
 }
        public GraphForBillboardVertexes CreateGraph()
        {
            var graph          = new GameObject("Graph");
            var graphControler = graph.AddComponent <GraphForBillboardVertexes>();

            graph.AddComponent <Button3D>().Action = (g) => graphControler.StartForceBasedLayout(1000);
            Graphs.Add(graphControler);
            graphControler.SetupParams(new GraphParameters(new Vector3(-69, -15, -30), "Click me"));

            var customFont  = Resources.Load <Font>(_fontPath);
            var mainTexture = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_mainTexture), 200, 200);

            mainTexture.name = "Target";

            var textTextureFactory = new TextTextureFactory(customFont, 32);
            var resizedTetxure     = Texture2DExtension.ResizeTexture(mainTexture, 200, 200);

            var baseScale = Vector2.one;

            var imageParameters = new BillboardParameters(resizedTetxure, scale: baseScale * 3f, useCache: true);

            var stretchableEdgeMaterialParameters = new StretchableEdgeMaterialParameters(Color.white, true);
            var edgeParameters = new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.yellow, true), new SpringParameters(1, 5));
            var coordinates    = new Vector3[26] {
                new Vector3(-91.62799f, -2.3942585f, -43.161083f),
                new Vector3(-91.138885f, -3.3022366f, -17.54464f),
                new Vector3(-68.31055f, -9.711845f, -29.303394f),
                new Vector3(-71.31007f, -2.7437487f, -56.661026f),
                new Vector3(-45.411583f, -2.9353018f, -42.584347f),
                new Vector3(-47.30028f, -3.1969986f, -22.738922f),
                new Vector3(-64.77525f, -3.20299f, -2.5527115f),
                new Vector3(-49.3282f, 5.356124f, -2.7157516f),
                new Vector3(-37.920048f, 5.7275085f, -30.361862f),
                new Vector3(-52.707493f, 8.093277f, -57.873806f),
                new Vector3(-88.294876f, 7.605483f, -57.47967f),
                new Vector3(-81.45683f, 6.2511196f, -1.4397621f),
                new Vector3(-105.84165f, 6.152034f, -28.007107f),
                new Vector3(-99.75531f, 16.45427f, -11.093414f),
                new Vector3(-38.78393f, 16.683071f, -14.812604f),
                new Vector3(-40.808224f, 15.8126135f, -44.379215f),
                new Vector3(-73.01358f, 14.908555f, -55.7931f),
                new Vector3(-68.13217f, 15.000669f, 1.9544525f),
                new Vector3(-83.44349f, 25.460217f, -8.76181f),
                new Vector3(-59.4664f, 24.522339f, -10.350107f),
                new Vector3(-47.37295f, 23.873238f, -31.69215f),
                new Vector3(-92.189575f, 24.484436f, -28.520731f),
                new Vector3(-81.99469f, 23.73766f, -46.882977f),
                new Vector3(-56.52922f, 23.624348f, -43.66665f),
                new Vector3(-72.91645f, 30.9808f, -30.28012f),
                new Vector3(-93f, 20f, -42f),
            };

            var currentVertex = new BillboardVertex[coordinates.Length];

            for (var i = 0; i < coordinates.Length; ++i)
            {
                currentVertex[i] = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(new BillboardVertexParameters(new[] { imageParameters }, coordinates[i]));
            }

            currentVertex[0].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters);
            currentVertex[1].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters);
            currentVertex[3].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters);
            currentVertex[4].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters);
            currentVertex[5].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters);
            currentVertex[6].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters);
            currentVertex[0].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[3], edgeParameters);
            currentVertex[1].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[0], edgeParameters);
            currentVertex[3].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[0], edgeParameters);
            currentVertex[4].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[5], edgeParameters);
            currentVertex[4].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[3], edgeParameters);
            currentVertex[5].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[6], edgeParameters);
            currentVertex[6].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[1], edgeParameters);

            currentVertex[7].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[8], edgeParameters);
            currentVertex[8].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[9], edgeParameters);
            currentVertex[9].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[10], edgeParameters);
            currentVertex[10].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[12], edgeParameters);
            currentVertex[11].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[7], edgeParameters);
            currentVertex[12].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[11], edgeParameters);

            currentVertex[9].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[4], edgeParameters);
            currentVertex[9].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[3], edgeParameters);
            currentVertex[10].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[3], edgeParameters);
            currentVertex[10].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[0], edgeParameters);
            currentVertex[12].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[0], edgeParameters);
            currentVertex[12].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[1], edgeParameters);

            currentVertex[11].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[1], edgeParameters);
            currentVertex[11].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[6], edgeParameters);
            currentVertex[7].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[6], edgeParameters);
            currentVertex[7].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[5], edgeParameters);
            currentVertex[8].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[5], edgeParameters);
            currentVertex[8].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[4], edgeParameters);

            currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[20], edgeParameters);
            currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[19], edgeParameters);
            currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[18], edgeParameters);
            currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[21], edgeParameters);
            currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[22], edgeParameters);
            currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[23], edgeParameters);

            currentVertex[20].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[19], edgeParameters);
            currentVertex[19].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[18], edgeParameters);
            currentVertex[18].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[21], edgeParameters);
            currentVertex[21].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[22], edgeParameters);
            currentVertex[22].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[23], edgeParameters);
            currentVertex[23].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[20], edgeParameters);

            currentVertex[18].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[17], edgeParameters);
            currentVertex[18].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[13], edgeParameters);
            currentVertex[21].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[13], edgeParameters);
            currentVertex[22].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[16], edgeParameters);
            currentVertex[23].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[16], edgeParameters);
            currentVertex[23].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[15], edgeParameters);
            currentVertex[20].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[15], edgeParameters);
            currentVertex[20].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[14], edgeParameters);
            currentVertex[19].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[14], edgeParameters);
            currentVertex[19].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[17], edgeParameters);

            currentVertex[17].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[13], edgeParameters);
            currentVertex[16].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[15], edgeParameters);
            currentVertex[15].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[14], edgeParameters);
            currentVertex[14].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[17], edgeParameters);

            currentVertex[15].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[9], edgeParameters);
            currentVertex[15].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[8], edgeParameters);
            currentVertex[14].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[8], edgeParameters);
            currentVertex[14].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[7], edgeParameters);
            currentVertex[17].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[7], edgeParameters);
            currentVertex[17].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[11], edgeParameters);
            currentVertex[13].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[11], edgeParameters);
            currentVertex[13].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[12], edgeParameters);
            currentVertex[16].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[10], edgeParameters);
            currentVertex[16].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[9], edgeParameters);

            currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[10], edgeParameters);
            currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[12], edgeParameters);
            currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[13], edgeParameters);
            currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[21], edgeParameters);
            currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[22], edgeParameters);
            currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[16], edgeParameters);

            var         text           = textTextureFactory.MakeTextTexture($"Click me", true);
            const float scale          = 20;
            var         textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale));

            return(graphControler);
        }