public LineToPointAdapter2(LineNew line) { hash = line.GetHashCode(); if (cache.ContainsKey(hash)) { return; // we already have it } WriteLine($"{++count}: Generating points for line [{line.Start.X},{line.Start.Y}]-[{line.End.X},{line.End.Y}] (with caching)"); // ^^^^ List <Point2> points = new List <Point2>(); int left = Math.Min(line.Start.X, line.End.X); int right = Math.Max(line.Start.X, line.End.X); int top = Math.Min(line.Start.Y, line.End.Y); int bottom = Math.Max(line.Start.Y, line.End.Y); int dx = right - left; int dy = line.End.Y - line.Start.Y; if (dx == 0) { for (int y = top; y <= bottom; ++y) { points.Add(new Point2(left, y)); } } else if (dy == 0) { for (int x = left; x <= right; ++x) { points.Add(new Point2(x, top)); } } cache.Add(hash, points); }
protected bool Equals(LineNew other) { return(Equals(Start, other.Start) && Equals(End, other.End)); }