示例#1
0
		public override Rect Apply(Rect oldDataRect, Rect newDataRect, Viewport2D viewport)
		{
			double ratio = newDataRect.Width / newDataRect.Height;
			double coeff = Math.Sqrt(ratio);

			double newWidth = newDataRect.Width / coeff;
			double newHeight = newDataRect.Height * coeff;

			Point center = newDataRect.GetCenter();
			Rect res = RectExtensions.FromCenterSize(center, newWidth, newHeight);
			return res;
		}
		public override Rect Apply(Rect oldDataRect, Rect newDataRect, Viewport2D viewport)
		{
			Rect output = viewport.Output;
			if (output.Width == 0 || output.Height == 0)
				return newDataRect;

			double screenRatio = output.Width / output.Height;
			double viewportRatio = newDataRect.Width / newDataRect.Height;
			double ratio = screenRatio / viewportRatio;
			double width = proportionRatio * newDataRect.Width * ratio;
			double height = newDataRect.Height;

			if (width < newDataRect.Width)
			{
				height = newDataRect.Height / proportionRatio / ratio;
				width = newDataRect.Width;
			}

			Point center = newDataRect.GetCenter();
			Rect res = RectExtensions.FromCenterSize(center, width, height);

			return res;
		}
示例#3
0
		public static Rect RectZoom(Rect rect, double ratio)
		{
			return RectZoom(rect, rect.GetCenter(), ratio);
		}
示例#4
0
		public static Rect RectZoom(Rect rect, double horizontalRatio, double verticalRatio)
		{
			return RectZoom(rect, rect.GetCenter(), horizontalRatio, verticalRatio);
		}
        private static IEnumerable<Point> Quadivide(Rect area)
        {
            if (area.Width > 0 && area.Height > 0)
            {
                var center = area.GetCenter();

                var x = Math.Floor(center.X);
                var y = Math.Floor(center.Y);

                yield return new Point(x, y);

                var quad1 = new Rect(area.TopLeft, new Point(x, y + 1));
                var quad2 = new Rect(area.TopRight, new Point(x, y));
                var quad3 = new Rect(area.BottomLeft, new Point(x + 1, y + 1));
                var quad4 = new Rect(area.BottomRight, new Point(x + 1, y));

                var quads = new Queue<IEnumerator<Point>>();
                quads.Enqueue(Quadivide(quad1).GetEnumerator());
                quads.Enqueue(Quadivide(quad2).GetEnumerator());
                quads.Enqueue(Quadivide(quad3).GetEnumerator());
                quads.Enqueue(Quadivide(quad4).GetEnumerator());
                while (quads.Count > 0)
                {
                    var quad = quads.Dequeue();
                    if (quad.MoveNext())
                    {
                        yield return quad.Current;
                        quads.Enqueue(quad);
                    }
                }
            }
        }
示例#6
0
		protected Rect EnlargeRect(Rect rect)
		{
			Size newSize = rect.Size;
			newSize.Width += 1;
			newSize.Height += 1;
			Rect result = RectExtensions.FromCenterSize(rect.GetCenter(), newSize);
			return result;

			//double coeff = 1 + 1.0 / tileWidth;
			//return EnlargeRect(rect, coeff);
		}