public TransportPathfindResult FindShortestPath(TransportPathfindOptions options) { var optionsInterop = options.ToInterop(); var pathfindResultInterop = NativeTransportApi_FindShortestPath(NativePluginRunner.API, ref optionsInterop); if (pathfindResultInterop.IsPathFound) { // alloc and pin buffers var pathDirectedEdgeIdsBuffer = new TransportDirectedEdgeIdInterop[pathfindResultInterop.PathDirectedEdgesSize]; var pathDirectedEdgeIdsBufferGCHandle = GCHandle.Alloc(pathDirectedEdgeIdsBuffer, GCHandleType.Pinned); pathfindResultInterop.PathDirectedEdges = pathDirectedEdgeIdsBufferGCHandle.AddrOfPinnedObject(); var pathPointsBuffer = new DoubleVector3[pathfindResultInterop.PathPointsSize]; var pathPointsBufferGCHandle = GCHandle.Alloc(pathPointsBuffer, GCHandleType.Pinned); pathfindResultInterop.PathPoints = pathPointsBufferGCHandle.AddrOfPinnedObject(); var pathPointParamsBuffer = new double[pathfindResultInterop.PathPointsSize]; var pathPointParamsBufferGCHandle = GCHandle.Alloc(pathPointParamsBuffer, GCHandleType.Pinned); pathfindResultInterop.PathPointParams = pathPointParamsBufferGCHandle.AddrOfPinnedObject(); var result = PopulateAndReleaseTransportPathfindResult(pathDirectedEdgeIdsBuffer, pathPointsBuffer, pathPointParamsBuffer, ref pathfindResultInterop); pathDirectedEdgeIdsBufferGCHandle.Free(); pathPointsBufferGCHandle.Free(); pathPointParamsBufferGCHandle.Free(); return(result); } else { var failedResult = new TransportPathfindResult(); return(failedResult); } }
/// <summary> /// Find the shortest path, if any, between two points on a transport network as specified in options. /// Note that the shortest path from point A to point B is not necessarily the reverse of the shortest /// path from point B to point A, as some TransportWays may only be traversed in one direction. /// The method considers the currently streamed-in set of the transport network only. As such, it /// is provided primarily as a convenience for connecting relatively nearby points for visualization /// purposes - it is not intended to be useful for large-scale route planning. /// </summary> /// <param name="options">A TransportPathfindOptions object that provides input parameters. /// TransportPathfindOptionsBuilder may be used to help construct an appropriate options object.</param> /// <returns>A result object, indicating whether a path was found, and providing the path if successful.</returns> public TransportPathfindResult FindShortestPath(TransportPathfindOptions options) { return(m_apiInternal.FindShortestPath(options)); }