using System.Diagnostics; using System.Collections; using System.Collections.Generic; using Microsoft.Msagl.Core.Geometry; #if DEBUG using System.Linq; #endif namespace Microsoft.Msagl.Routing.Rectilinear.Nudging { /// /// represents a segment of a path /// internal class LinkedPoint : IEnumerable { internal Point Point { get; set; } internal LinkedPoint Next { get; set; } internal LinkedPoint(Point point) { Point = point; } public IEnumerator GetEnumerator() { for (var p = this; p != null; p = p.Next) yield return p.Point; } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } internal double X { get { return Point.X; } } internal double Y { get { return Point.Y; } } internal void InsertVerts(int i, int j, Point[] points) { for (j--; i < j; j--) SetNewNext(points[j]); } public void InsertVertsInReverse(int i, int j, Point[] points) { for (i++; i < j; i++) SetNewNext(points[i]); } internal void SetNewNext(Point p) { var nv = new LinkedPoint(p); var tmp = Next; Next = nv; nv.Next = tmp; Debug.Assert( CompassVector.IsPureDirection(Point, Next.Point) ); } #if TEST_MSAGL public override string ToString() { return Point.ToString(); } #endif } }