public List<FloorTile> getPath() { if (this.m_status.position != null) { startPoint = this.m_status.position.location.X + "_" + this.m_status.position.location.Y; m_parent.PostMessage("start: " + startPoint); } else { startPoint = "4_4"; } if (this.m_status.endPoint != null) { targetPoint = this.m_status.endPoint.X + "_" + this.m_status.endPoint.Y; m_parent.PostMessage("end: " + targetPoint); } else { targetPoint = "4_6"; } //startPoint = txtStartPoint.Text; //targetPoint = txtTargetPoint.Text; DijkstraShortestPathAlgorithm<string, Edge<string>> dijkstra = new DijkstraShortestPathAlgorithm<string, Edge<string>>(graph, AlgorithmExtensions.GetIndexer<Edge<string>, double>(edgeCost)); // Attach a Vertex Predecessor Recorder Observer to give us the paths QuickGraph.Algorithms.Observers.VertexPredecessorRecorderObserver<string, Edge<string>> predecessorObserver = new QuickGraph.Algorithms.Observers.VertexPredecessorRecorderObserver<string, Edge<string>>(); predecessorObserver.Attach(dijkstra); // attach a distance observer to give us the shortest path distances VertexDistanceRecorderObserver<string, Edge<string>> distObserver = new VertexDistanceRecorderObserver<string, Edge<string>>(AlgorithmExtensions.GetIndexer<Edge<string>, double>(edgeCost)); distObserver.Attach(dijkstra); // Run the algorithm with A set to be the source dijkstra.Compute(startPoint); String outString = ""; //outString += distObserver.Distances[targetPoint] + "\n"; IEnumerable<Edge<string>> path; if (predecessorObserver.TryGetPath(targetPoint, out path)) foreach (var u in path) outString += u + ";"; List<FloorTile> retval = new List<FloorTile>(); string[] outEdges = Regex.Split(outString, ";"); if (outEdges.Length > 0) { for (int i = 0; i < outEdges.Length; i++) { if (outEdges[i].Length > 0) { m_parent.PostMessage(outEdges[i]); string[] outPoint = Regex.Split(outEdges[i], "->"); //start points retval.Add(getTileByIndex(fp, outPoint[0])); } } //add target retval.Add(getTileByIndex(fp, targetPoint)); } m_parent.PostMessage(retval.Count.ToString()); m_parent.PostMessage(outString); if(retval.Count == 1 && retval[0].Equals(getTileByIndex(fp, targetPoint))){ m_parent.PostMessage("Can't find path. Start or end point is not walkable or no available walkable tiles"); return null; } return condenseList(retval); }
public List<FloorTile> getPath() { List<FloorTile> retval = new List<FloorTile>(); if (this.fp == null || this.fp.getStartTile() == null || this.fp.getTargetTile() == null) return retval; startPoint = this.fp.getStartTile().Position.X + "_" + this.fp.getStartTile().Position.Y; targetPoint = this.fp.getTargetTile().Position.X + "_" + this.fp.getTargetTile().Position.Y; this.messages += "- Start Get Path\n"; //startPoint = txtStartPoint.Text; //targetPoint = txtTargetPoint.Text; DijkstraShortestPathAlgorithm<string, Edge<string>> dijkstra = new DijkstraShortestPathAlgorithm<string, Edge<string>>(graph, AlgorithmExtensions.GetIndexer<Edge<string>, double>(edgeCost)); // Attach a Vertex Predecessor Recorder Observer to give us the paths QuickGraph.Algorithms.Observers.VertexPredecessorRecorderObserver<string, Edge<string>> predecessorObserver = new QuickGraph.Algorithms.Observers.VertexPredecessorRecorderObserver<string, Edge<string>>(); predecessorObserver.Attach(dijkstra); // attach a distance observer to give us the shortest path distances VertexDistanceRecorderObserver<string, Edge<string>> distObserver = new VertexDistanceRecorderObserver<string, Edge<string>>(AlgorithmExtensions.GetIndexer<Edge<string>, double>(edgeCost)); distObserver.Attach(dijkstra); // Run the algorithm with A set to be the source dijkstra.Compute(startPoint); this.messages += " Start Point: " + startPoint + ".\n"; this.messages += " Target Point: " + targetPoint + ".\n"; String outString = ""; //outString += distObserver.Distances[targetPoint] + "\n"; IEnumerable<Edge<string>> path; if (predecessorObserver.TryGetPath(targetPoint, out path)) foreach (var u in path) outString += u + ";"; string[] outEdges = Regex.Split(outString, ";"); if (outEdges.Length > 0) { for (int i = 0; i < outEdges.Length; i++) { if (outEdges[i].Length > 0) { this.messages += outEdges[i] + "\n"; string[] outPoint = Regex.Split(outEdges[i], "->"); //start points retval.Add(getTileByIndex(fp, outPoint[0])); } } //add target retval.Add(getTileByIndex(fp, targetPoint)); } this.messages += retval.Count.ToString()+ "\n";; if(retval.Count == 1 && retval[0].Equals(getTileByIndex(fp, targetPoint))){ this.messages += "Can't find path. Start or end point is not walkable or no available walkable tiles" + "\n"; ; return null; } fp.setPath(retval); //return retval; return condenseList(retval); }
public List <FloorTile> getPath() { if (this.m_status.position != null) { startPoint = this.m_status.position.location.X + "_" + this.m_status.position.location.Y; m_parent.PostMessage("start: " + startPoint); } else { startPoint = "4_4"; } if (this.m_status.endPoint != null) { targetPoint = this.m_status.endPoint.X + "_" + this.m_status.endPoint.Y; m_parent.PostMessage("end: " + targetPoint); } else { targetPoint = "4_6"; } //startPoint = txtStartPoint.Text; //targetPoint = txtTargetPoint.Text; DijkstraShortestPathAlgorithm <string, Edge <string> > dijkstra = new DijkstraShortestPathAlgorithm <string, Edge <string> >(graph, AlgorithmExtensions.GetIndexer <Edge <string>, double>(edgeCost)); // Attach a Vertex Predecessor Recorder Observer to give us the paths QuickGraph.Algorithms.Observers.VertexPredecessorRecorderObserver <string, Edge <string> > predecessorObserver = new QuickGraph.Algorithms.Observers.VertexPredecessorRecorderObserver <string, Edge <string> >(); predecessorObserver.Attach(dijkstra); // attach a distance observer to give us the shortest path distances VertexDistanceRecorderObserver <string, Edge <string> > distObserver = new VertexDistanceRecorderObserver <string, Edge <string> >(AlgorithmExtensions.GetIndexer <Edge <string>, double>(edgeCost)); distObserver.Attach(dijkstra); // Run the algorithm with A set to be the source dijkstra.Compute(startPoint); String outString = ""; //outString += distObserver.Distances[targetPoint] + "\n"; IEnumerable <Edge <string> > path; if (predecessorObserver.TryGetPath(targetPoint, out path)) { foreach (var u in path) { outString += u + ";"; } } List <FloorTile> retval = new List <FloorTile>(); string[] outEdges = Regex.Split(outString, ";"); if (outEdges.Length > 0) { for (int i = 0; i < outEdges.Length; i++) { if (outEdges[i].Length > 0) { m_parent.PostMessage(outEdges[i]); string[] outPoint = Regex.Split(outEdges[i], "->"); //start points retval.Add(getTileByIndex(fp, outPoint[0])); } } //add target retval.Add(getTileByIndex(fp, targetPoint)); } m_parent.PostMessage(retval.Count.ToString()); m_parent.PostMessage(outString); if (retval.Count == 1 && retval[0].Equals(getTileByIndex(fp, targetPoint))) { m_parent.PostMessage("Can't find path. Start or end point is not walkable or no available walkable tiles"); return(null); } return(condenseList(retval)); }
public List <FloorTile> getPath() { List <FloorTile> retval = new List <FloorTile>(); if (this.fp == null || this.fp.getStartTile() == null || this.fp.getTargetTile() == null) { return(retval); } startPoint = this.fp.getStartTile().Position.X + "_" + this.fp.getStartTile().Position.Y; targetPoint = this.fp.getTargetTile().Position.X + "_" + this.fp.getTargetTile().Position.Y; this.messages += "- Start Get Path\n"; //startPoint = txtStartPoint.Text; //targetPoint = txtTargetPoint.Text; DijkstraShortestPathAlgorithm <string, Edge <string> > dijkstra = new DijkstraShortestPathAlgorithm <string, Edge <string> >(graph, AlgorithmExtensions.GetIndexer <Edge <string>, double>(edgeCost)); // Attach a Vertex Predecessor Recorder Observer to give us the paths QuickGraph.Algorithms.Observers.VertexPredecessorRecorderObserver <string, Edge <string> > predecessorObserver = new QuickGraph.Algorithms.Observers.VertexPredecessorRecorderObserver <string, Edge <string> >(); predecessorObserver.Attach(dijkstra); // attach a distance observer to give us the shortest path distances VertexDistanceRecorderObserver <string, Edge <string> > distObserver = new VertexDistanceRecorderObserver <string, Edge <string> >(AlgorithmExtensions.GetIndexer <Edge <string>, double>(edgeCost)); distObserver.Attach(dijkstra); // Run the algorithm with A set to be the source dijkstra.Compute(startPoint); this.messages += " Start Point: " + startPoint + ".\n"; this.messages += " Target Point: " + targetPoint + ".\n"; String outString = ""; //outString += distObserver.Distances[targetPoint] + "\n"; IEnumerable <Edge <string> > path; if (predecessorObserver.TryGetPath(targetPoint, out path)) { foreach (var u in path) { outString += u + ";"; } } string[] outEdges = Regex.Split(outString, ";"); if (outEdges.Length > 0) { for (int i = 0; i < outEdges.Length; i++) { if (outEdges[i].Length > 0) { this.messages += outEdges[i] + "\n"; string[] outPoint = Regex.Split(outEdges[i], "->"); //start points retval.Add(getTileByIndex(fp, outPoint[0])); } } //add target retval.Add(getTileByIndex(fp, targetPoint)); } this.messages += retval.Count.ToString() + "\n";; if (retval.Count == 1 && retval[0].Equals(getTileByIndex(fp, targetPoint))) { this.messages += "Can't find path. Start or end point is not walkable or no available walkable tiles" + "\n";; return(null); } fp.setPath(retval); //return retval; return(condenseList(retval)); }