public IEdge FindEdge(Point location) { lock (AllEdgesLock) { return(AllEdges.FirstOrDefault(edge => edge.OnPoint(location))); } }
public void RedrawAllEdges() { lock (AllEdgesLock) { AllEdges.ForEach(e => e.Draw()); } }
public void AddEgde(IEdge edge) { lock (AllEdgesLock) { AllEdges.Add(edge); } }
/// <summary> /// Topologically sorts the nodes of this graph. Throws an exception if this graph is acyclic. /// </summary> /// <returns>The sorted nodes collection.</returns> public IEnumerable <EdgeListNode <T> > TopologicalSort() { List <EdgeListNode <T> > ordered = new List <EdgeListNode <T> >(); List <EdgeListNode <T> > noIncomingEdges = NodesWithoutIncomingEdges.ToList(); List <Edge <EdgeListNode <T> > > allEdges = AllEdges.ToList(); while (noIncomingEdges.Count() > 0) { EdgeListNode <T> node = noIncomingEdges[0]; noIncomingEdges.RemoveAt(0); ordered.Add(node); IEnumerable <Edge <EdgeListNode <T> > > outgoingEdges = allEdges.Where((Edge <EdgeListNode <T> > e) => e.From.Equals(node)).ToList(); foreach (Edge <EdgeListNode <T> > edge in outgoingEdges) { allEdges.Remove(edge); int index = allEdges.FindIndex((Edge <EdgeListNode <T> > e) => e.To.Equals(edge.To)); if (index == -1) { noIncomingEdges.Add(edge.To); } } } if (allEdges.Count > 0) { throw new Exception("This graph has at least one cycle, so it can't be topologically sorted."); } else { return(ordered); } }
public void RemoveEdge(IEdge edge) { lock (AllEdgesLock) { AllEdges.Remove(edge); } }
public void DeleteEdges(Edge edge) { edge.EndNode.EdgesIn.Remove(edge.ID); edge.StartNode.EdgesOut.Remove(edge.ID); //FlatGraph.deleteEdges(edge); AllEdges.Remove(edge.ID); DestroyImmediate(edge.gameObject); }
public void AddEdge(int startVertexId, int endVertexId, int weight) { if (!AllVertexIndices.ContainsKey(startVertexId)) { AllVertexIndices[startVertexId] = true; } if (!AllVertexIndices.ContainsKey(endVertexId)) { AllVertexIndices[endVertexId] = true; } AllEdges.Add(new GraphEdge(startVertexId, endVertexId, weight)); }
//this handles all the edge select, add, remove commands a user would need public Edge AddEdges(Node StartNode, Node EndNode, String Label = "") { //construct edge object Edge edge = this.gameObject.AddComponent <Edge>(); edge.StartNode = StartNode; edge.EndNode = EndNode; StartNode.EdgesOut.Add(edge.ID, edge); EndNode.EdgesIn.Add(edge.ID, edge); AllEdges.Add(edge.ID, edge); //FlatGraph.addEdges(edge); return(edge); }
/// <summary> /// /// </summary> /// <param name="vertex"></param> public void AddVertex(Vertex <T> vertex) { if (AllVertex.ContainsKey(vertex.Id)) { return; } AllVertex.Add(vertex.Id, vertex); foreach (var e in vertex.GetAdjEdges()) { AllEdges.Add(e); NumberOfEdges++; } NumberOfVertices++; }
public void AddEdge(long id1, long id2, int weight) { Vertex <T> v1 = null; Vertex <T> v2 = null; if (!AllVertex.ContainsKey(id1)) { v1 = new Vertex <T>(id1); AddVertex(v1); } else { v1 = AllVertex[id1]; } if (!AllVertex.ContainsKey(id2)) { v2 = new Vertex <T>(id2); AddVertex(v2); } else { v2 = AllVertex[id2]; } Edge <T> e = new Edge <T>(v1, v2, IsDirected, weight); AllEdges.Add(e); v1.AddAdjacentVertex(e, v2); if (!IsDirected) { v2.AddAdjacentVertex(e, v1); } NumberOfEdges++; }
public void EmptyAllEdges() { AllEdges.Clear(); }
public void AddEdge(int st, int end, int weight) { AllEdges.Add(new Edge(st, end, weight)); AllVertices[st] = true; AllVertices[end] = true; }