Exemplo n.º 1
0
        public async Task AddNewEdge(bool done)
        {
            if (done && NewEdge.Head != null && NewEdge.Tail != null)
            {
                if (!Graph.MultiGraph && NewEdge.Head == NewEdge.Tail)
                {
                    Graph.MultiGraph = true;
                }
                else if (NewEdge.MultiGraph == false && NewEdge.MultiEdges != null)
                {
                    foreach (Edge edge in NewEdge.MultiEdges)
                    {
                        Graph.Edges.Remove(edge);
                    }
                }
                else if (!Graph.MultiGraph)
                {
                    Graph.MultiGraph = true;
                }
                if (Graph.Weighted)
                {
                    EdgeService.AddEdge(Graph.Edges, Options.Default, NewEdge.Head, NewEdge.Tail, Math.Round(NewEdge.Weight, 2));
                }
                else
                {
                    EdgeService.AddEdge(Graph.Edges, Options.Default, NewEdge.Head, NewEdge.Tail);
                }
            }
            await NewEdgeChanged.InvokeAsync(new NewEdge());

            await ActiveGraphChanged.InvokeAsync(new Graph());
        }
Exemplo n.º 2
0
 public async Task InsertEdge()
 {
     if (ActiveGraph.Nodes.Count == 1)
     {
         NewEdge.Tail           = ActiveGraph.Nodes[0];
         NewEdge.WaitingForNode = true;
         SvgClass = "ClickNext";
         await NewEdgeChanged.InvokeAsync(NewEdge);
     }
 }
Exemplo n.º 3
0
        public async Task OnNodeClick(Node node)
        {
            if (StartAlgorithm.Algorithm != Algorithm.None && StartAlgorithm.Type != AlgorithmType.NoInput)
            {
                if (StartAlgorithm.StartNode == null)
                {
                    StartAlgorithm.StartNode = node;
                    if (StartAlgorithm.Type == AlgorithmType.OneInput)
                    {
                        StartAlgorithm.Ready = true;
                    }
                    await StartAlgorithmChanged.InvokeAsync(StartAlgorithm);
                }
                else if (StartAlgorithm.EndNode == null && StartAlgorithm.Type == AlgorithmType.TwoInput)
                {
                    StartAlgorithm.EndNode = node;
                    StartAlgorithm.Ready   = true;
                    await StartAlgorithmChanged.InvokeAsync(StartAlgorithm);
                }
            }
            await JustThisNodeActive(node);

            if (NewEdge.WaitingForNode)
            {
                NewEdge.WaitingForNode = false;
                await NewEdgeChanged.InvokeAsync(NewEdge);

                NewEdge.Head       = ActiveGraph.Nodes[0];
                NewEdge.MultiEdges = EdgeService.MultiGraphEdges(Graph.Edges, NewEdge.Head, NewEdge.Tail, Graph.Directed);
                if (Graph.Weighted == true)
                {
                    NewEdge.GetEdgeWeight = true;
                }
                else if (!NewEdge.MultiEdges.Any())
                {
                    await AddNewEdge(true);
                }
            }
            else if (GraphMode == GraphMode.InsertEdge)
            {
                await InsertEdge();
            }
        }