using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using Microsoft.Msagl.Core.Geometry;
using Microsoft.Msagl.Core.Layout;
namespace Microsoft.Msagl.Routing.Rectilinear.Nudging {
///
/// represents the path for an EdgeGeometry
///
internal class Path {
///
/// the corresponding edge geometry
///
internal EdgeGeometry EdgeGeometry { get; set; }
///
/// the path points
///
internal IEnumerable PathPoints { get; set; }
internal double Width { get { return EdgeGeometry.LineWidth;} }
///
/// constructor
///
///
internal Path(EdgeGeometry edgeGeometry) {
EdgeGeometry = edgeGeometry;
}
internal Point End {
get {
return LastEdge.Target;
}
}
internal Point Start {
get {
return FirstEdge.Source;
}
}
internal IEnumerable PathEdges {
get {
for (var e = FirstEdge; e != null; e = e.Next)
yield return e;
}
}
internal PathEdge FirstEdge { get; set; }
internal PathEdge LastEdge { get; set; }
internal void AddEdge(PathEdge edge) {
edge.Path = this;
Debug.Assert(edge.Source == LastEdge.Target);
LastEdge.Next = edge;
edge.Prev = LastEdge;
LastEdge = edge;
}
internal void SetFirstEdge(PathEdge edge) {
LastEdge = FirstEdge = edge;
edge.Path = this;
}
///
///
///
///
public override string ToString()
{
return String.Format(CultureInfo.InvariantCulture, "{0}->{1}", this.EdgeGeometry.SourcePort.Location, this.EdgeGeometry.TargetPort.Location);
}
}
}