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()); }
public async Task InsertEdge() { if (ActiveGraph.Nodes.Count == 1) { NewEdge.Tail = ActiveGraph.Nodes[0]; NewEdge.WaitingForNode = true; SvgClass = "ClickNext"; await NewEdgeChanged.InvokeAsync(NewEdge); } }
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(); } }