/// Base class for all data transforms. /// Defines methods to transform point from data coordinate system to viewport coordinates and vice versa. ///</summary> publicabstractclassDataTransform { /// Transforms the point in data coordinates to viewport coordinates. ///</summary> ///<param name="pt">The point in data coordinates.</param> ///<returns></returns> publicabstract Point DataToViewport(Point pt); /// Transforms the point in viewport coordinates to data coordinates. ///</summary> ///<param name="pt">The point in viewport coordinates.</param> ///<returns></returns> publicabstract Point ViewportToData(Point pt);
privatestaticreadonly DataRect defaultDomain = DataRect.Empty; /// Gets the data domain. ///</summary> ///<value>The data domain.</value> publicvirtual DataRect DataDomain { get { return defaultDomain; } } }
namespaceMicrosoft.Research.DynamicDataDisplay { /// A central class in 2d coordinate transformation in DynamicDataDisplay. /// Provides methods to transform point from one coordinate system to another. ///</summary> publicsealedclassCoordinateTransform { privateCoordinateTransform(Rect visibleRect, Rect screenRect) { this.visibleRect = visibleRect; this.screenRect = screenRect;
internal CoordinateTransform WithRects(Rect visibleRect, Rect screenRect) { CoordinateTransform copy = new CoordinateTransform(visibleRect, screenRect); copy.dataTransform = dataTransform; return copy; }
/// Creates a new instance of CoordinateTransform with the given data transform. ///</summary> ///<param name="dataTransform">The data transform.</param> ///<returns></returns> public CoordinateTransform WithDataTransform(DataTransform dataTransform) { if (dataTransform == null) thrownew ArgumentNullException("dataTransform");
internalstatic CoordinateTransform CreateDefault() { CoordinateTransform transform = new CoordinateTransform(new Rect(0, 0, 1, 1), new Rect(0, 0, 1, 1));
return transform; }
#endregion
#region Transform methods
/// Transforms point from data coordinates to screen. ///</summary> ///<param name="dataPoint">The point in data coordinates.</param> ///<returns></returns> public Point DataToScreen(Point dataPoint) { Point viewportPoint = dataTransform.DataToViewport(dataPoint);
Point screenPoint = new Point(viewportPoint.X * rxToScreen - cxToScreen, cyToScreen - viewportPoint.Y * ryToScreen);
return screenPoint; }
/// Transforms point from screen coordinates to data coordinates. ///</summary> ///<param name="screenPoint">The point in screen coordinates.</param> ///<returns></returns> public Point ScreenToData(Point screenPoint) { Point viewportPoint = new Point(screenPoint.X * rxToData - cxToData, cyToData - screenPoint.Y * ryToData);
Point dataPoint = dataTransform.ViewportToData(viewportPoint);
return dataPoint; }
/// Transforms point from viewport coordinates to screen coordinates. ///</summary> ///<param name="viewportPoint">The point in viewport coordinates.</param> ///<returns></returns> public Point ViewportToScreen(Point viewportPoint) { Point screenPoint = new Point(viewportPoint.X * rxToScreen - cxToScreen, cyToScreen - viewportPoint.Y * ryToScreen);
return screenPoint; }
/// Transforms point from screen coordinates to viewport coordinates. ///</summary> ///<param name="screenPoint">The point in screen coordinates.</param> ///<returns></returns> public Point ScreenToViewport(Point screenPoint) { Point viewportPoint = new Point(screenPoint.X * rxToData - cxToData, cyToData - screenPoint.Y * ryToData);
return viewportPoint; }
#endregion
[DebuggerBrowsable(DebuggerBrowsableState.Never)] private Rect visibleRect; ///<summary> /// Gets the viewport rectangle. ///</summary> ///<value>The viewport rect.</value> public Rect ViewportRect { get { return visibleRect; } }
[DebuggerBrowsable(DebuggerBrowsableState.Never)] private Rect screenRect; ///<summary> /// Gets the screen rectangle. ///</summary> ///<value>The screen rect.</value> public Rect ScreenRect { get { return screenRect; } }
[DebuggerBrowsable(DebuggerBrowsableState.Never)] private DataTransform dataTransform = DataTransforms.Identity; ///<summary> /// Gets the data transform. ///</summary> ///<value>The data transform.</value> public DataTransform DataTransform { get { return dataTransform; } } } }
近期评论