68 lines
1.5 KiB
C#
68 lines
1.5 KiB
C#
using System.Windows;
|
|
using Microsoft.Research.DynamicDataDisplay.Common;
|
|
using System.Diagnostics;
|
|
|
|
namespace Microsoft.Research.DynamicDataDisplay
|
|
{
|
|
public static class RectExtensions
|
|
{
|
|
public static Point GetCenter(this Rect rect)
|
|
{
|
|
return new Point(rect.Left + rect.Width * 0.5, rect.Top + rect.Height * 0.5);
|
|
}
|
|
|
|
public static Rect FromCenterSize(Point center, Size size)
|
|
{
|
|
return FromCenterSize(center, size.Width, size.Height);
|
|
}
|
|
|
|
public static Rect FromCenterSize(Point center, double width, double height)
|
|
{
|
|
Rect res = new Rect(center.X - width / 2, center.Y - height / 2, width, height);
|
|
return res;
|
|
}
|
|
|
|
public static Rect Zoom(this Rect rect, Point to, double ratio)
|
|
{
|
|
return CoordinateUtilities.RectZoom(rect, to, ratio);
|
|
}
|
|
|
|
public static Rect ZoomOutFromCenter(this Rect rect, double ratio)
|
|
{
|
|
return CoordinateUtilities.RectZoom(rect, rect.GetCenter(), ratio);
|
|
}
|
|
|
|
public static Rect ZoomInToCenter(this Rect rect, double ratio)
|
|
{
|
|
return CoordinateUtilities.RectZoom(rect, rect.GetCenter(), 1 / ratio);
|
|
}
|
|
|
|
public static Int32Rect ToInt32Rect(this Rect rect)
|
|
{
|
|
Int32Rect intRect = new Int32Rect(
|
|
(int)rect.X,
|
|
(int)rect.Y,
|
|
(int)rect.Width,
|
|
(int)rect.Height);
|
|
|
|
return intRect;
|
|
}
|
|
|
|
[DebuggerStepThrough]
|
|
public static DataRect ToDataRect(this Rect rect)
|
|
{
|
|
return new DataRect(rect);
|
|
}
|
|
|
|
internal static bool IsNaN(this Rect rect)
|
|
{
|
|
return !rect.IsEmpty && (
|
|
rect.X.IsNaN() ||
|
|
rect.Y.IsNaN() ||
|
|
rect.Width.IsNaN() ||
|
|
rect.Height.IsNaN()
|
|
);
|
|
}
|
|
}
|
|
}
|