/// <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);
Example #2
0
        /// <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);
        }
Example #3
0
 public abstract void AddEdge(uint from, uint to, TEdgeData data, Collections.Coordinates.Collections.ICoordinateCollection coordinates);