/// <summary>Computes bounding rectangle for sequence of points</summary> /// <param name="points">Points sequence</param> /// <returns>Minimal axis-aligned bounding rectangle</returns> public static DataRect GetViewportBounds(IEnumerable <Point> viewportPoints) { DataRect bounds = DataRect.Empty; double xMin = Double.PositiveInfinity; double xMax = Double.NegativeInfinity; double yMin = Double.PositiveInfinity; double yMax = Double.NegativeInfinity; foreach (Point p in viewportPoints) { xMin = Math.Min(xMin, p.X); xMax = Math.Max(xMax, p.X); yMin = Math.Min(yMin, p.Y); yMax = Math.Max(yMax, p.Y); } // were some points in collection if (!Double.IsInfinity(xMin)) { bounds = DataRect.Create(xMin, yMin, xMax, yMax); } return(bounds); }
protected override DataRect CoerceVisible(DataRect newVisible, DataRect baseVisible) { DataRect result = newVisible; if (Plotter == null) { return(baseVisible); } DataRect outerVisible = Plotter.Viewport.Visible; double xMin = outerVisible.XMin * xScale + xShift; double xMax = outerVisible.XMax * xScale + xShift; double yMin = outerVisible.YMin * yScale + yShift; double yMax = outerVisible.YMax * yScale + yShift; outerVisible = DataRect.Create(xMin, yMin, xMax, yMax); switch (ConjunctionMode) { case ViewportConjunctionMode.None: result = baseVisible; break; case ViewportConjunctionMode.X: result = new DataRect(outerVisible.XMin, baseVisible.YMin, outerVisible.Width, baseVisible.Height); break; case ViewportConjunctionMode.Y: result = new DataRect(baseVisible.XMin, outerVisible.YMin, baseVisible.Width, outerVisible.Height); break; case ViewportConjunctionMode.XY: result = outerVisible; break; default: break; } return(result); }
public static DataRect WithY(this DataRect rect, double ymin, double ymax) { return(DataRect.Create(rect.XMin, ymin, rect.XMax, ymax)); }
public static DataRect WithX(this DataRect rect, double xmin, double xmax) { return(DataRect.Create(xmin, rect.YMin, xmax, rect.YMax)); }