567 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			567 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //============================================================================
 | |
| //ZedGraph Class Library - A Flexible Line Graph/Bar Graph Library in C#
 | |
| //Copyright ?2004  John Champion
 | |
| //
 | |
| //This library is free software; you can redistribute it and/or
 | |
| //modify it under the terms of the GNU Lesser General Public
 | |
| //License as published by the Free Software Foundation; either
 | |
| //version 2.1 of the License, or (at your option) any later version.
 | |
| //
 | |
| //This library is distributed in the hope that it will be useful,
 | |
| //but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
| //Lesser General Public License for more details.
 | |
| //
 | |
| //You should have received a copy of the GNU Lesser General Public
 | |
| //License along with this library; if not, write to the Free Software
 | |
| //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | |
| //=============================================================================
 | |
| 
 | |
| using System;
 | |
| using System.Drawing;
 | |
| using System.Runtime.Serialization;
 | |
| using System.Security.Permissions;
 | |
| 
 | |
| namespace DrawGraph
 | |
| {
 | |
| 	/// <summary>
 | |
| 	/// A class than contains information about the position of an object on the graph.
 | |
| 	/// </summary>
 | |
| 	/// 
 | |
| 	/// <author> John Champion </author>
 | |
| 	/// <version> $Revision: 3.14 $ $Date: 2006/06/24 20:26:43 $ </version>
 | |
| 	[Serializable]
 | |
| 	public class Location : ICloneable, ISerializable
 | |
| 	{
 | |
| 	#region Private Fields
 | |
| 		/// <summary> Private field to store the vertical alignment property for
 | |
| 		/// this object.  Use the public property <see cref="Location.AlignV"/>
 | |
| 		/// to access this value.  The value of this field is a <see cref="AlignV"/> enum.
 | |
| 		/// </summary>
 | |
| 		private AlignV	_alignV;
 | |
| 		/// <summary> Private field to store the horizontal alignment property for
 | |
| 		/// this object.  Use the public property <see cref="Location.AlignH"/>
 | |
| 		/// to access this value.  The value of this field is a <see cref="AlignH"/> enum.
 | |
| 		/// </summary>
 | |
| 		private AlignH	_alignH;
 | |
| 
 | |
| 		/// <summary> Private fields to store the X and Y coordinate positions for
 | |
| 		/// this object.  Use the public properties <see cref="X"/> and
 | |
| 		/// <see cref="Y"/> to access these values.  The coordinate type stored here is
 | |
| 		/// dependent upon the setting of <see cref="CoordinateFrame"/>.
 | |
| 		/// </summary>
 | |
| 		private double	_x,
 | |
| 							_y,
 | |
| 							_width,
 | |
| 							_height;
 | |
| 							
 | |
| 		/// <summary>
 | |
| 		/// Private field to store the coordinate system to be used for defining the
 | |
| 		/// object position.  Use the public property
 | |
| 		/// <see cref="CoordinateFrame"/> to access this value. The coordinate system
 | |
| 		/// is defined with the <see cref="CoordType"/> enum.
 | |
| 		/// </summary>
 | |
| 		private CoordType	_coordinateFrame;
 | |
| 	#endregion
 | |
| 
 | |
| 	#region Properties
 | |
| 		/// <summary>
 | |
| 		/// A horizontal alignment parameter for this object specified
 | |
| 		/// using the <see cref="AlignH"/> enum type.
 | |
| 		/// </summary>
 | |
| 		public AlignH AlignH
 | |
| 		{
 | |
| 			get { return _alignH; }
 | |
| 			set { _alignH = value; }
 | |
| 		}
 | |
| 		/// <summary>
 | |
| 		/// A vertical alignment parameter for this object specified
 | |
| 		/// using the <see cref="AlignV"/> enum type.
 | |
| 		/// </summary>
 | |
| 		public AlignV AlignV
 | |
| 		{
 | |
| 			get { return _alignV; }
 | |
| 			set { _alignV = value; }
 | |
| 		}
 | |
| 		/// <summary>
 | |
| 		/// The coordinate system to be used for defining the object position
 | |
| 		/// </summary>
 | |
| 		/// <value> The coordinate system is defined with the <see cref="CoordType"/>
 | |
| 		/// enum</value>
 | |
| 		public CoordType CoordinateFrame
 | |
| 		{
 | |
| 			get { return _coordinateFrame; }
 | |
| 			set { _coordinateFrame = value; }
 | |
| 		}
 | |
| 		/// <summary>
 | |
| 		/// The x position of the object.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// The units of this position
 | |
| 		/// are specified by the <see cref="CoordinateFrame"/> property.
 | |
| 		/// The object will be aligned to this position based on the
 | |
| 		/// <see cref="AlignH"/> property.
 | |
| 		/// </remarks>
 | |
| 		public double X
 | |
| 		{
 | |
| 			get { return _x; }
 | |
| 			set { _x = value; }
 | |
| 		}
 | |
| 		/// <summary>
 | |
| 		/// The y position of the object.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// The units of this position
 | |
| 		/// are specified by the <see cref="CoordinateFrame"/> property.
 | |
| 		/// The object will be aligned to this position based on the
 | |
| 		/// <see cref="AlignV"/> property.
 | |
| 		/// </remarks>
 | |
| 		public double Y
 | |
| 		{
 | |
| 			get { return _y; }
 | |
| 			set { _y = value; }
 | |
| 		}
 | |
| 		/// <summary>
 | |
| 		/// The x1 position of the object (an alias for the x position).
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// The units of this position
 | |
| 		/// are specified by the <see cref="CoordinateFrame"/> property.
 | |
| 		/// The object will be aligned to this position based on the
 | |
| 		/// <see cref="AlignH"/> property.
 | |
| 		/// </remarks>
 | |
| 		public double X1
 | |
| 		{
 | |
| 			get { return _x; }
 | |
| 			set { _x = value; }
 | |
| 		}
 | |
| 		/// <summary>
 | |
| 		/// The y1 position of the object (an alias for the y position).
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// The units of this position
 | |
| 		/// are specified by the <see cref="CoordinateFrame"/> property.
 | |
| 		/// The object will be aligned to this position based on the
 | |
| 		/// <see cref="AlignV"/> property.
 | |
| 		/// </remarks>
 | |
| 		public double Y1
 | |
| 		{
 | |
| 			get { return _y; }
 | |
| 			set { _y = value; }
 | |
| 		}
 | |
| 		/// <summary>
 | |
| 		/// The width of the object.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// The units of this position are specified by the
 | |
| 		/// <see cref="CoordinateFrame"/> property.
 | |
| 		/// </remarks>
 | |
| 		public double Width
 | |
| 		{
 | |
| 			get { return _width; }
 | |
| 			set { _width = value; }
 | |
| 		}
 | |
| 		/// <summary>
 | |
| 		/// The height of the object.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// The units of this position are specified by the
 | |
| 		/// <see cref="CoordinateFrame"/> property.
 | |
| 		/// </remarks>
 | |
| 		public double Height
 | |
| 		{
 | |
| 			get { return _height; }
 | |
| 			set { _height = value; }
 | |
| 		}
 | |
| 		/// <summary>
 | |
| 		/// The x2 position of the object.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// The units of this position are specified by the
 | |
| 		/// <see cref="CoordinateFrame"/> property.
 | |
| 		/// The object will be aligned to this position based on the
 | |
| 		/// <see cref="AlignH"/> property.  This position is only used for
 | |
| 		/// objects such as <see cref="ArrowObj"/>, where it makes sense
 | |
| 		/// to have a second coordinate.  Note that the X2 position is stored
 | |
| 		/// internally as a <see cref="Width"/> offset from <see cref="X"/>.
 | |
| 		/// </remarks>
 | |
| 		public double X2
 | |
| 		{
 | |
| 			get { return _x+_width; }
 | |
| 			//set { width = value-x; }
 | |
| 		}
 | |
| 		/// <summary>
 | |
| 		/// The y2 position of the object.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// The units of this position
 | |
| 		/// are specified by the <see cref="CoordinateFrame"/> property.
 | |
| 		/// The object will be aligned to this position based on the
 | |
| 		/// <see cref="AlignV"/> property.  This position is only used for
 | |
| 		/// objects such as <see cref="ArrowObj"/>, where it makes sense
 | |
| 		/// to have a second coordinate.  Note that the Y2 position is stored
 | |
| 		/// internally as a <see cref="Height"/> offset from <see cref="Y"/>.
 | |
| 		/// </remarks>
 | |
| 		public double Y2
 | |
| 		{
 | |
| 			get { return _y+_height; }
 | |
| 			//set { height = value-y; }
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// The <see cref="RectangleF"/> for this object as defined by the
 | |
| 		/// <see cref="X"/>, <see cref="Y"/>, <see cref="Width"/>, and
 | |
| 		/// <see cref="Height"/> properties.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// Note that this method reduces the precision of the location coordinates from double
 | |
| 		/// precision to single precision.  In some cases, such as <see cref="AxisType.Date" />, it
 | |
| 		/// may affect the resolution of the point location.
 | |
| 		/// </remarks>
 | |
| 		/// <value>A <see cref="RectangleF"/> in <see cref="CoordinateFrame"/>
 | |
| 		/// units.</value>
 | |
| 		public RectangleF Rect
 | |
| 		{
 | |
| 			get { return new RectangleF( (float)_x, (float)_y, (float)_width, (float)_height ); }
 | |
| 			set
 | |
| 			{
 | |
| 				_x = value.X;
 | |
| 				_y = value.Y;
 | |
| 				_width = value.Width;
 | |
| 				_height = value.Height;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// The top-left <see cref="PointF"/> for this <see cref="Location"/>.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// Note that this method reduces the precision of the location coordinates from double
 | |
| 		/// precision to single precision.  In some cases, such as <see cref="AxisType.Date" />, it
 | |
| 		/// may affect the resolution of the point location.
 | |
| 		/// </remarks>
 | |
| 		/// <value>A <see cref="PointF"/> in <see cref="CoordinateFrame"/> units.</value>
 | |
| 		public PointF TopLeft
 | |
| 		{
 | |
| 			get { return new PointF( (float)_x, (float)_y ); }
 | |
| 			set { _x = value.X; _y = value.Y; }
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// The bottom-right <see cref="PointF"/> for this <see cref="Location"/>.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// Note that this method reduces the precision of the location coordinates from double
 | |
| 		/// precision to single precision.  In some cases, such as <see cref="AxisType.Date" />, it
 | |
| 		/// may affect the resolution of the point location.
 | |
| 		/// </remarks>
 | |
| 		/// <value>A <see cref="PointF"/> in <see cref="CoordinateFrame"/> units.</value>
 | |
| 		public PointF BottomRight
 | |
| 		{
 | |
| 			get { return new PointF( (float)this.X2, (float)this.Y2 ); }
 | |
| 			//set { this.X2 = value.X; this.Y2 = value.Y; }
 | |
| 		}
 | |
| 	#endregion
 | |
| 	
 | |
| 	#region Constructors
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// Default constructor for the <see cref="Location"/> class.
 | |
| 		/// </summary>
 | |
| 		public Location() : this( 0, 0, CoordType.ChartFraction )
 | |
| 		{
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// Constructor for the <see cref="Location"/> class that specifies the
 | |
| 		/// x, y position and the <see cref="CoordType"/>.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// The (x,y) position corresponds to the top-left corner;
 | |
| 		/// </remarks>
 | |
| 		/// <param name="x">The x position, specified in units of <see paramref="coordType"/>.
 | |
| 		/// </param>
 | |
| 		/// <param name="y">The y position, specified in units of <see paramref="coordType"/>.
 | |
| 		/// </param>
 | |
| 		/// <param name="coordType">The <see cref="CoordType"/> enum that specifies the
 | |
| 		/// units for <see paramref="x"/> and <see paramref="y"/></param>
 | |
| 		public Location( double x, double y, CoordType coordType ) :
 | |
| 				this( x, y, coordType, AlignH.Left, AlignV.Top )
 | |
| 		{
 | |
| 		}
 | |
| 		
 | |
| 		/// <summary>
 | |
| 		/// Constructor for the <see cref="Location"/> class that specifies the
 | |
| 		/// x, y position and the <see cref="CoordType"/>.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// The (x,y) position corresponds to the top-left corner;
 | |
| 		/// </remarks>
 | |
| 		/// <param name="x">The x position, specified in units of <see paramref="coordType"/>.
 | |
| 		/// </param>
 | |
| 		/// <param name="y">The y position, specified in units of <see paramref="coordType"/>.
 | |
| 		/// </param>
 | |
| 		/// <param name="coordType">The <see cref="CoordType"/> enum that specifies the
 | |
| 		/// units for <see paramref="x"/> and <see paramref="y"/></param>
 | |
| 		/// <param name="alignH">The <see cref="ZedGraph.AlignH"/> enum that specifies
 | |
| 		/// the horizontal alignment of the object with respect to the (x,y) location</param>
 | |
| 		/// <param name="alignV">The <see cref="ZedGraph.AlignV"/> enum that specifies
 | |
| 		/// the vertical alignment of the object with respect to the (x,y) location</param>
 | |
| 		public Location( double x, double y, CoordType coordType, AlignH alignH, AlignV alignV )
 | |
| 		{
 | |
| 			_x = x;
 | |
| 			_y = y;
 | |
| 			_width = 0;
 | |
| 			_height = 0;
 | |
| 			_coordinateFrame = coordType;
 | |
| 			_alignH = alignH;
 | |
| 			_alignV = alignV;
 | |
| 		}
 | |
| 		
 | |
| 		/// <summary>
 | |
| 		/// Constructor for the <see cref="Location"/> class that specifies the
 | |
| 		/// (x, y), (width, height), and the <see cref="CoordType"/>.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// The (x,y) position
 | |
| 		/// corresponds to the starting position, the (x2, y2) coorresponds to the ending position
 | |
| 		/// (typically used for <see cref="ArrowObj"/>'s).
 | |
| 		/// </remarks>
 | |
| 		/// <param name="x">The x position, specified in units of <see paramref="coordType"/>.
 | |
| 		/// </param>
 | |
| 		/// <param name="y">The y position, specified in units of <see paramref="coordType"/>.
 | |
| 		/// </param>
 | |
| 		/// <param name="width">The width, specified in units of <see paramref="coordType"/>.
 | |
| 		/// </param>
 | |
| 		/// <param name="height">The height, specified in units of <see paramref="coordType"/>.
 | |
| 		/// </param>
 | |
| 		/// <param name="coordType">The <see cref="CoordType"/> enum that specifies the
 | |
| 		/// units for <see paramref="x"/> and <see paramref="y"/></param>
 | |
| 		/// <param name="alignH">The <see cref="ZedGraph.AlignH"/> enum that specifies
 | |
| 		/// the horizontal alignment of the object with respect to the (x,y) location</param>
 | |
| 		/// <param name="alignV">The <see cref="ZedGraph.AlignV"/> enum that specifies
 | |
| 		/// the vertical alignment of the object with respect to the (x,y) location</param>
 | |
| 		public Location( double x, double y, double width, double height,
 | |
| 			CoordType coordType, AlignH alignH, AlignV alignV ) :
 | |
| 				this( x, y, coordType, alignH, alignV )
 | |
| 		{
 | |
| 			_width = width;
 | |
| 			_height = height;
 | |
| 		}
 | |
| 		
 | |
| 		/// <summary>
 | |
| 		/// The Copy Constructor
 | |
| 		/// </summary>
 | |
| 		/// <param name="rhs">The <see cref="Location"/> object from which to copy</param>
 | |
| 		public Location( Location rhs )
 | |
| 		{
 | |
| 			_x = rhs._x;
 | |
| 			_y = rhs._y;
 | |
| 			_width = rhs._width;
 | |
| 			_height = rhs._height;
 | |
| 			_coordinateFrame = rhs.CoordinateFrame;
 | |
| 			_alignH = rhs.AlignH;
 | |
| 			_alignV = rhs.AlignV;
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// Implement the <see cref="ICloneable" /> interface in a typesafe manner by just
 | |
| 		/// calling the typed version of <see cref="Clone" />
 | |
| 		/// </summary>
 | |
| 		/// <returns>A deep copy of this object</returns>
 | |
| 		object ICloneable.Clone()
 | |
| 		{
 | |
| 			return this.Clone();
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// Typesafe, deep-copy clone method.
 | |
| 		/// </summary>
 | |
| 		/// <returns>A new, independent copy of this class</returns>
 | |
| 		public Location Clone()
 | |
| 		{
 | |
| 			return new Location( this );
 | |
| 		}
 | |
| 
 | |
| 	#endregion
 | |
| 
 | |
| 	#region Serialization
 | |
| 		/// <summary>
 | |
| 		/// Current schema value that defines the version of the serialized file
 | |
| 		/// </summary>
 | |
| 		public const int schema = 10;
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// Constructor for deserializing objects
 | |
| 		/// </summary>
 | |
| 		/// <param name="info">A <see cref="SerializationInfo"/> instance that defines the serialized data
 | |
| 		/// </param>
 | |
| 		/// <param name="context">A <see cref="StreamingContext"/> instance that contains the serialized data
 | |
| 		/// </param>
 | |
| 		protected Location( SerializationInfo info, StreamingContext context )
 | |
| 		{
 | |
| 			// The schema value is just a file version parameter.  You can use it to make future versions
 | |
| 			// backwards compatible as new member variables are added to classes
 | |
| 			int sch = info.GetInt32( "schema" );
 | |
| 
 | |
| 			_alignV = (AlignV) info.GetValue( "alignV", typeof(AlignV) );
 | |
| 			_alignH = (AlignH) info.GetValue( "alignH", typeof(AlignH) );
 | |
| 			_x = info.GetDouble( "x" );
 | |
| 			_y = info.GetDouble( "y" );
 | |
| 			_width = info.GetDouble( "width" );
 | |
| 			_height = info.GetDouble( "height" );
 | |
| 			_coordinateFrame = (CoordType) info.GetValue( "coordinateFrame", typeof(CoordType) );
 | |
| 		}
 | |
| 		/// <summary>
 | |
| 		/// Populates a <see cref="SerializationInfo"/> instance with the data needed to serialize the target object
 | |
| 		/// </summary>
 | |
| 		/// <param name="info">A <see cref="SerializationInfo"/> instance that defines the serialized data</param>
 | |
| 		/// <param name="context">A <see cref="StreamingContext"/> instance that contains the serialized data</param>
 | |
| 		[SecurityPermissionAttribute(SecurityAction.Demand,SerializationFormatter=true)]
 | |
| 		public virtual void GetObjectData( SerializationInfo info, StreamingContext context )
 | |
| 		{
 | |
| 			info.AddValue( "schema", schema );
 | |
| 			info.AddValue( "alignV", _alignV );
 | |
| 			info.AddValue( "alignH", _alignH );
 | |
| 			info.AddValue( "x", _x );
 | |
| 			info.AddValue( "y", _y );
 | |
| 			info.AddValue( "width", _width );
 | |
| 			info.AddValue( "height", _height );
 | |
| 			info.AddValue( "coordinateFrame", _coordinateFrame );
 | |
| 		}
 | |
| 	#endregion
 | |
| 
 | |
| 	#region Methods
 | |
| 		/// <summary>
 | |
| 		/// Transform this <see cref="Location"/> object to display device
 | |
| 		/// coordinates using the properties of the specified <see cref="GraphPane"/>.
 | |
| 		/// </summary>
 | |
| 		/// <param name="pane">
 | |
| 		/// A reference to the <see cref="PaneBase"/> object that contains
 | |
| 		/// the <see cref="Axis"/> classes which will be used for the transform.
 | |
| 		/// </param>
 | |
| 		/// <returns>A point in display device coordinates that corresponds to the
 | |
| 		/// specified user point.</returns>
 | |
| 		public PointF Transform( PaneBase pane )
 | |
| 		{
 | |
| 			return Transform( pane, _x, _y,
 | |
| 						_coordinateFrame );
 | |
| 		}
 | |
| 		
 | |
| 		/// <summary>
 | |
| 		/// Transform a data point from the specified coordinate type
 | |
| 		/// (<see cref="CoordType"/>) to display device coordinates (pixels).
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// If <see paramref="pane"/> is not of type <see cref="GraphPane"/>, then
 | |
| 		/// only the <see cref="CoordType.PaneFraction"/> transformation is available.
 | |
| 		/// </remarks>
 | |
| 		/// <param name="pane">
 | |
| 		/// A reference to the <see cref="PaneBase"/> object that contains
 | |
| 		/// the <see cref="Axis"/> classes which will be used for the transform.
 | |
| 		/// </param>
 | |
| 		/// <param name="x">The x coordinate that defines the point in user
 | |
| 		/// space.</param>
 | |
| 		/// <param name="y">The y coordinate that defines the point in user
 | |
| 		/// space.</param>
 | |
| 		/// <param name="coord">A <see cref="CoordType"/> type that defines the
 | |
| 		/// coordinate system in which the X,Y pair is defined.</param>
 | |
| 		/// <returns>A point in display device coordinates that corresponds to the
 | |
| 		/// specified user point.</returns>
 | |
| 		public static PointF Transform( PaneBase pane, double x, double y, CoordType coord )
 | |
| 		{
 | |
| 			return pane.TransformCoord( x, y, coord );
 | |
| 		}
 | |
| 		
 | |
| 		/// <summary>
 | |
| 		/// Transform this <see cref="Location"/> from the coordinate system
 | |
| 		/// as specified by <see cref="CoordinateFrame"/> to the device coordinates
 | |
| 		/// of the specified <see cref="PaneBase"/> object.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// The returned
 | |
| 		/// <see cref="PointF"/> struct represents the top-left corner of the
 | |
| 		/// object that honors the <see cref="Location"/> properties.
 | |
| 		/// The <see cref="AlignH"/> and <see cref="AlignV"/> properties are honored in 
 | |
| 		/// this transformation.
 | |
| 		/// </remarks>
 | |
| 		/// <param name="pane">
 | |
| 		/// A reference to the <see cref="PaneBase"/> object that contains
 | |
| 		/// the <see cref="Axis"/> classes which will be used for the transform.
 | |
| 		/// </param>
 | |
| 		/// <param name="width">The width of the object in device pixels</param>
 | |
| 		/// <param name="height">The height of the object in device pixels</param>
 | |
| 		/// <returns>The top-left corner of the object</returns>
 | |
| 		public PointF TransformTopLeft( PaneBase pane, float width, float height )
 | |
| 		{
 | |
| 			PointF pt = Transform( pane );
 | |
| 			
 | |
| 			if ( _alignH == AlignH.Right )
 | |
| 				pt.X -= width;
 | |
| 			else if ( _alignH == AlignH.Center )
 | |
| 				pt.X -= width / 2.0F;
 | |
| 				
 | |
| 			if ( _alignV == AlignV.Bottom )
 | |
| 				pt.Y -= height;
 | |
| 			else if ( _alignV == AlignV.Center )
 | |
| 				pt.Y -= height / 2.0F;
 | |
| 			
 | |
| 			return pt;
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// The <see cref="PointF"/> for this object as defined by the
 | |
| 		/// <see cref="X"/> and <see cref="Y"/>
 | |
| 		/// properties.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// This method transforms the location to output device pixel units.
 | |
| 		/// The <see cref="AlignH"/> and <see cref="AlignV"/> properties are ignored for
 | |
| 		/// this transformation (see <see cref="TransformTopLeft(PaneBase,float,float)"/>).
 | |
| 		/// </remarks>
 | |
| 		/// <value>A <see cref="PointF"/> in pixel units.</value>
 | |
| 		public PointF TransformTopLeft( PaneBase pane )
 | |
| 		{
 | |
| 			return Transform( pane );
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// The <see cref="PointF"/> for this object as defined by the
 | |
| 		/// <see cref="X2"/> and <see cref="Y2"/> properties.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// This method transforms the location to output device pixel units.
 | |
| 		/// The <see cref="AlignH"/> and <see cref="AlignV"/> properties are ignored for
 | |
| 		/// this transformation (see <see cref="TransformTopLeft(PaneBase,float,float)"/>).
 | |
| 		/// </remarks>
 | |
| 		/// <value>A <see cref="PointF"/> in pixel units.</value>
 | |
| 		public PointF TransformBottomRight( PaneBase pane )
 | |
| 		{
 | |
| 			return Transform( pane, this.X2, this.Y2, _coordinateFrame );
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// Transform the <see cref="RectangleF"/> for this object as defined by the
 | |
| 		/// <see cref="X"/>, <see cref="Y"/>, <see cref="Width"/>, and
 | |
| 		/// <see cref="Height"/> properties.
 | |
| 		/// </summary>
 | |
| 		/// <remarks>
 | |
| 		/// This method transforms the location to output device pixel units.
 | |
| 		/// The <see cref="AlignH"/> and <see cref="AlignV"/> properties are honored in 
 | |
| 		/// this transformation.
 | |
| 		/// </remarks>
 | |
| 		/// <value>A <see cref="RectangleF"/> in pixel units.</value>
 | |
| 		public RectangleF TransformRect( PaneBase pane )
 | |
| 		{
 | |
| 			PointF pix1 = TransformTopLeft( pane );
 | |
| 			PointF pix2 = TransformBottomRight( pane );
 | |
| 			//PointF pix3 = TransformTopLeft( pane, pix2.X - pix1.X, pix2.Y - pix1.Y );
 | |
| 
 | |
| 			return new RectangleF( pix1.X, pix1.Y, Math.Abs(pix2.X - pix1.X), Math.Abs(pix2.Y - pix1.Y) );
 | |
| 		}
 | |
| 
 | |
| 	#endregion
 | |
| 
 | |
| 	}
 | |
| }
 |