private void ToggleSelectEdge(GraphEdge de)
        {
            Debug.WriteLine("Toggle select edge");
            Int32 listIndex = GetEdgeListIndex(de.EdgeId);

            if (de.Selected)
            {
                this.EdgeList.SelectRange(new ItemIndexRange(listIndex, 1));
                de.DeSelect();
            }
            else
            {
                this.EdgeList.DeselectRange(new ItemIndexRange(listIndex, 1));
                de.Select();
            }
        }
Exemple #2
0
        /// <summary>
        /// Remove an edge
        /// </summary>
        /// <param name="edgeToRemove"></param>
        /// <returns></returns>
        public Boolean RemoveEdge(UInt32 edgeToRemove)
        {
            Debug.WriteLine("Removing edge");
            GraphEdge ue           = this.Edges[edgeToRemove];
            UInt32    headVertexId = ue.HeadVertexId;
            UInt32    tailVertexId = ue.TailVertexId;

            if (!this.Edges.ContainsKey(edgeToRemove))
            {
                return(false);
            }
            this.Edges.Remove(edgeToRemove);
            //this.AdjacencyMatrix[headVertexId].Remove(tailVertexId);
            //this.AdjacencyMatrix[tailVertexId].Remove(headVertexId);
            //this.IncidenceMatrix[headVertexId].Remove(edgeToRemove);
            //this.IncidenceMatrix[tailVertexId].Remove(edgeToRemove);
            OnEdgesChanged(new EdgeChangedEventArgs {
                ChangedEdge = ue
            });
            this.LastEdgeChange = ChangeType.Removed;
            return(true);
        }
Exemple #3
0
 /// <summary>
 /// Add an Edge between two
 /// </summary>
 /// <param name="edgeToAdd"></param>
 /// <returns></returns>
 public Boolean AddEdge(GraphEdge edgeToAdd)
 {
     Debug.WriteLine("Adding edge");
     //if (this.Edges.ContainsKey(edgeToAdd.EdgeId))
     //{
     //    return false;
     //}
     edgeToAdd.EdgeId = this.EdgeCounter;
     this.Edges.Add(edgeToAdd.EdgeId, edgeToAdd);
     this.Vertices[edgeToAdd.HeadVertexId].AddNeighbor(edgeToAdd.TailVertexId);
     this.Vertices[edgeToAdd.TailVertexId].AddNeighbor(edgeToAdd.HeadVertexId);
     //this.AdjacencyMatrix[edgeToAdd.HeadVertexId].Add(edgeToAdd.TailVertexId);
     //this.AdjacencyMatrix[edgeToAdd.TailVertexId].Add(edgeToAdd.HeadVertexId);
     //this.IncidenceMatrix[edgeToAdd.HeadVertexId].Add(edgeToAdd.EdgeId);
     //this.IncidenceMatrix[edgeToAdd.TailVertexId].Add(edgeToAdd.EdgeId);
     OnEdgesChanged(new EdgeChangedEventArgs {
         ChangedEdge = edgeToAdd, ChangeType = ChangeType.Added
     });
     this.LastEdgeChange = ChangeType.Added;
     this.EdgeCounter++;
     return(true);
 }
Exemple #4
0
        public static Graph GenerateRandomGraph(
            UInt32 minNumVerts,
            UInt32 maxNumVerts,
            Double edgeProb)
        {
            Debug.WriteLine("generate random graph");

            Random rng      = new Random();
            Int32  numVerts = rng.Next((Int32)minNumVerts, (Int32)maxNumVerts);
            Graph  outGraph = new Graph();

            // Create the desired number of vertices
            for (int i = 0; i < numVerts; i++)
            {
                GraphVertex gv = new GraphVertex
                {
                    Value = rng.Next()
                };
                outGraph.AddVertex(gv);
            }

            int minNumEdges = 0;
            int maxNumEdges = (int)((outGraph.Vertices.Count * outGraph.Vertices.Count) * edgeProb);
            int numEdges    = rng.Next(minNumEdges, maxNumEdges);
            SortedSet <Tuple <uint, uint> > edgePairs = new SortedSet <Tuple <uint, uint> >();

            for (int i = 0; i < numEdges; i++)
            {
                Tuple <uint, uint> edgeTuple = GenerateEdge(rng, edgePairs, outGraph.VertexCounter);
                GraphEdge          ge        = new GraphEdge
                {
                    HeadVertexId = edgeTuple.Item1,
                    TailVertexId = edgeTuple.Item2,
                    Value        = rng.Next()
                };
                outGraph.AddEdge(ge);
            }


            //foreach (KeyValuePair<UInt32, GraphVertex> kvp1 in outGraph.Vertices)
            //{
            //    foreach (KeyValuePair<UInt32, GraphVertex> kvp2 in outGraph.Vertices)
            //    {
            //        if (kvp1.Value.VertexId != kvp2.Value.VertexId)
            //        {
            //            Double val = rng.NextDouble();
            //            if (val >= edgeProb)
            //            {
            //                GraphEdge ge = new GraphEdge
            //                {
            //                    HeadVertexId = kvp1.Value.VertexId,
            //                    TailVertexId = kvp2.Value.VertexId,
            //                    Value = rng.Next()
            //                };
            //                outGraph.AddEdge(ge);
            //            }
            //        }

            //    }
            //}

            return(outGraph);
        }