private void WriteLogWithTwoWayTraveledData(TwoWayTraveledPathData data) { Application.Current.Dispatcher.Invoke(new Action(() => { SearchEventManager sem = data.SEM; Logger.ClearLog(); foreach (var searchEvent in sem.Events) { Logger.WriteLogInfo( searchEvent.EventMessage); } StringBuilder msg = new StringBuilder(); Logger.WriteLogInfo(string.Format("Total edges EXPLORED in PATH1: {0}", data.Path1.ExploredEdges.Count)); foreach (var edge in data.Path1.ExploredEdges) { msg.Append(edge + "=>"); } Logger.WriteLogInfo(msg.ToString()); msg.Clear(); Logger.WriteLogInfo(string.Format("Total edges EXPLORED in PATH2: {0}", data.Path2.ExploredEdges.Count)); foreach (var edge in data.Path2.ExploredEdges) { msg.Append(edge + "=>"); } Logger.WriteLogInfo(msg.ToString()); msg.Clear(); Logger.WriteLogInfo(string.Format("Total edges TRAVELED in PATH1: {0}", data.Path1.TraveledEdges.Count)); foreach (var vert in data.Path1.TraveledEdges) { msg.Append(vert + "=>"); } Logger.WriteLogInfo(msg.ToString()); msg.Clear(); Logger.WriteLogInfo(string.Format("Total edges TRAVELED in PATH2: {0}", data.Path2.TraveledEdges.Count)); foreach (var vert in data.Path2.TraveledEdges) { msg.Append(vert + "=>"); } Logger.WriteLogInfo(msg.ToString()); msg.Clear(); Logger.WriteLogInfo("SHORTEST PATH:"); var shortestPath = data.GetShortestPath(); foreach (var edge in shortestPath) { msg.Append(edge + "=>"); } Logger.WriteLogInfo(msg.ToString()); })); }
private void SearchDidFinishedWithData(object data) { Application.Current.Dispatcher.Invoke(new Action(() => this.FillVisioGraphWithGraph(this.Graph))); Application.Current.Dispatcher.Invoke(new Action(this.SetupVisioTree)); SearchEventManager sem; List <Edge> shortestPath; if (data is TwoWayTraveledPathData) { TwoWayTraveledPathData twtpd = data as TwoWayTraveledPathData; sem = twtpd.SEM; shortestPath = twtpd.GetShortestPath(); this.WritePathCostToTextBox(twtpd.TotalCost); this.WriteLogWithTwoWayTraveledData(twtpd); } else if (data is TraveledPathData) { TraveledPathData tpd = data as TraveledPathData; sem = tpd.EventManager; shortestPath = tpd.TraveledEdges; this.WritePathCostToTextBox(tpd.TotalCost); this.WriteLogWithTraveledData(tpd); List <Vertex> visited = new List <Vertex>(); foreach (var vert in this.VisioGraph.Vertices) { var edges = this.VisioGraph.Edges.Where(e => (Vertex)e.Source == (Vertex)vert && !visited.Contains((Vertex)e.Target)); foreach (var edge in edges) { if (edge is MyEdge) { var ed = (edge as MyEdge); ed.Tag += "(" + this.Graph.HeuristicData.GetEdge((Vertex)edge.Target, sem.GoalVertex).Weight + ")"; } } visited.Add((Vertex)vert); } } else { return; } foreach (var searchEvent in sem.Events) { var edges1 = this.VisioGraph.Edges.Where( e => (Vertex)e.Source == searchEvent.ParticipantEdge.VerticeFrom && (Vertex)e.Target == searchEvent.ParticipantEdge.VerticeTo); switch (searchEvent.Type) { //case SearchEventType.AddedEdgeToExplored: // foreach (var edge in edges1) // { // if (edge is MyEdge) // { // var ed = edge as MyEdge; // ed.EdgeColor = Colors.Blue; // Application.Current.Dispatcher.Invoke(new Action(() => { this.VisioTree.AddVerticesAndEdge(edge); this.treeLayout.Graph = this.VisioTree; })); // Thread.Sleep(1000); // } // } // break; case SearchEventType.AddedEdgeToTraveled: foreach (var edge in edges1) { if (edge is MyEdge) { var ed = edge as MyEdge; ed.EdgeColor = Colors.Green; Application.Current.Dispatcher.Invoke(new Action(() => { this.VisioTree.AddVerticesAndEdge(edge); this.treeLayout.Graph = this.VisioTree; })); Thread.Sleep(1000); } } break; //case SearchEventType.RemovedEdgeFromExplored: // foreach (var edge in edges1) // { // if (edge is MyEdge) // { // var ed = edge as MyEdge; // ed.EdgeColor = Colors.Red; // Application.Current.Dispatcher.Invoke(new Action(() => { this.VisioTree.AddVerticesAndEdge(edge); this.treeLayout.Graph = this.VisioTree; })); // Thread.Sleep(1000); // } // } // break; } } foreach (var edge in shortestPath) { var edgeFromGraph = this.VisioGraph.Edges.Single( e => (Vertex)e.Source == edge.VerticeFrom && (Vertex)e.Target == edge.VerticeTo); if (edgeFromGraph is MyEdge) { var ed = edgeFromGraph as MyEdge; ed.EdgeColor = Colors.OrangeRed; } } }