/// <summary> /// Returns true if the given vertex has the given neighbour. /// </summary> /// <returns></returns> public override abstract bool GetEdgeShape(uint vertex1, uint vertex2, out Collections.Coordinates.Collections.ICoordinateCollection shape);
/// <summary> /// Returns a shape between the given vertices. /// </summary> /// <param name="graph"></param> /// <param name="from"></param> /// <param name="to"></param> /// <param name="data"></param> /// <returns></returns> protected override bool GetEdgeShape(IGraphReadOnly <CHEdgeData> graph, uint from, uint to, out Collections.Coordinates.Collections.ICoordinateCollection data) { var lowestWeight = float.MaxValue; data = null; var edges = graph.GetEdges(from, to); while (edges.MoveNext()) { var edgeData = edges.EdgeData; if (edgeData.CanMoveForward && edgeData.RepresentsNeighbourRelations && edgeData.Weight < lowestWeight) { data = edges.Intermediates; lowestWeight = edgeData.Weight; } } edges = graph.GetEdges(to, from); while (edges.MoveNext()) { var edgeData = edges.EdgeData; if (edgeData.CanMoveBackward && edgeData.RepresentsNeighbourRelations && edgeData.Weight < lowestWeight) { if (edges.Intermediates != null) { data = edges.Intermediates.Reverse(); } else { data = null; } lowestWeight = edgeData.Weight; } } return(lowestWeight < float.MaxValue); }
public abstract void AddEdge(uint from, uint to, TEdgeData data, Collections.Coordinates.Collections.ICoordinateCollection coordinates);