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(); } }
/// <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); }
/// <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); }
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); }