Ejemplo n.º 1
0
 public IEdge FindEdge(Point location)
 {
     lock (AllEdgesLock)
     {
         return(AllEdges.FirstOrDefault(edge => edge.OnPoint(location)));
     }
 }
Ejemplo n.º 2
0
 public void RedrawAllEdges()
 {
     lock (AllEdgesLock)
     {
         AllEdges.ForEach(e => e.Draw());
     }
 }
Ejemplo n.º 3
0
 public void AddEgde(IEdge edge)
 {
     lock (AllEdgesLock)
     {
         AllEdges.Add(edge);
     }
 }
Ejemplo n.º 4
0
        /// <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);
            }
        }
Ejemplo n.º 5
0
 public void RemoveEdge(IEdge edge)
 {
     lock (AllEdgesLock)
     {
         AllEdges.Remove(edge);
     }
 }
Ejemplo n.º 6
0
 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);
 }
Ejemplo n.º 7
0
 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));
 }
Ejemplo n.º 8
0
        //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);
        }
Ejemplo n.º 9
0
        /// <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++;
        }
Ejemplo n.º 10
0
        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++;
        }
Ejemplo n.º 11
0
 public void EmptyAllEdges()
 {
     AllEdges.Clear();
 }
Ejemplo n.º 12
0
 public void AddEdge(int st, int end, int weight)
 {
     AllEdges.Add(new Edge(st, end, weight));
     AllVertices[st]  = true;
     AllVertices[end] = true;
 }