Beispiel #1
0
        /// <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));
 }