namespace Yw.WinFrmUI.HydroL2d
|
{
|
/// <summary>
|
/// 坐标
|
/// </summary>
|
public class Coordinate
|
{
|
/// <summary>
|
/// 唯一构造函数(内部计算)
|
/// </summary>
|
/// <param name="origin">旋转中心点</param>
|
/// <param name="angle">旋转角度(顺时针)</param>
|
/// <param name="size">尺寸</param>
|
/// <param name="horiz">水平定位方式</param>
|
/// <param name="veriz">垂直定位方式</param>
|
public Coordinate
|
(
|
PointF origin,
|
float angle,
|
SizeF size,
|
StringAlignment horiz = StringAlignment.Near,
|
StringAlignment veriz = StringAlignment.Near
|
)
|
{
|
_origin = origin;
|
_angle = angle;
|
_size = size;
|
_horizAlignment = horiz;
|
_vertiAlignment = veriz;
|
|
//原始左上角坐标
|
_beforeLeftTop = PointF.Empty;
|
switch (horiz)
|
{
|
case StringAlignment.Near: _beforeLeftTop.X = _origin.X; break;
|
case StringAlignment.Center: _beforeLeftTop.X = _origin.X - _size.Width / 2f; break;
|
case StringAlignment.Far: _beforeLeftTop.X = _origin.X - _size.Width; break;
|
default: break;
|
}
|
switch (veriz)
|
{
|
case StringAlignment.Near: _beforeLeftTop.Y = _origin.Y; break;
|
case StringAlignment.Center: _beforeLeftTop.Y = _origin.Y - _size.Height / 2f; break;
|
case StringAlignment.Far: _beforeLeftTop.Y = _origin.Y - _size.Height; break;
|
default: break;
|
}
|
_beforeRectf = new RectangleF(_beforeLeftTop, _size);
|
|
_beforeRightTop = new PointF(_beforeLeftTop.X + _size.Width, _beforeLeftTop.Y);
|
_beforeLeftBottom = new PointF(_beforeLeftTop.X, _beforeLeftTop.Y + _size.Height);
|
_beforeRightBottom = new PointF(_beforeRightTop.X, _beforeLeftBottom.Y);
|
|
_afterLeftTop = _origin.RotatePointF(_beforeLeftTop, _angle);
|
_afterRightTop = _origin.RotatePointF(_beforeRightTop, _angle);
|
_afterLeftBottom = _origin.RotatePointF(_beforeLeftBottom, _angle);
|
_afterRightBottom = _origin.RotatePointF(_beforeRightBottom, _angle);
|
}
|
|
|
|
/// <summary>
|
/// 旋转中心点
|
/// </summary>
|
public PointF Origin
|
{
|
get { return _origin; }
|
private set { _origin = value; }
|
}
|
private PointF _origin;
|
|
/// <summary>
|
/// 旋转角度
|
/// </summary>
|
public float Angle
|
{
|
get { return _angle; }
|
private set { _angle = value; }
|
}
|
private float _angle;
|
|
/// <summary>
|
/// 尺寸
|
/// </summary>
|
public SizeF Size
|
{
|
get { return _size; }
|
private set { _size = value; }
|
}
|
private SizeF _size;
|
|
/// <summary>
|
/// 水平方向
|
/// </summary>
|
public StringAlignment HorizAlignment
|
{
|
get { return _horizAlignment; }
|
private set { _horizAlignment = value; }
|
}
|
private StringAlignment _horizAlignment;
|
|
/// <summary>
|
/// 垂直方向
|
/// </summary>
|
public StringAlignment VertiAlignment
|
{
|
get { return _vertiAlignment; }
|
private set { _vertiAlignment = value; }
|
}
|
private StringAlignment _vertiAlignment;
|
|
/// <summary>
|
/// 旋转之前的矩形
|
/// </summary>
|
public RectangleF BeforeRectf
|
{
|
get { return _beforeRectf; }
|
private set { _beforeRectf = value; }
|
}
|
private RectangleF _beforeRectf;
|
|
/// <summary>
|
/// 旋转之前左上角点坐标
|
/// </summary>
|
public PointF BeforeLeftTop
|
{
|
get { return _beforeLeftTop; }
|
private set { _beforeLeftTop = value; }
|
}
|
private PointF _beforeLeftTop;
|
|
/// <summary>
|
/// 旋转之前右上点坐标
|
/// </summary>
|
public PointF BeforeRightTop
|
{
|
get { return _beforeRightTop; }
|
private set { _beforeRightTop = value; }
|
}
|
private PointF _beforeRightTop;
|
|
/// <summary>
|
/// 旋转之前左下角点坐标
|
/// </summary>
|
public PointF BeforeLeftBottom
|
{
|
get { return _beforeLeftBottom; }
|
private set { _beforeLeftBottom = value; }
|
}
|
private PointF _beforeLeftBottom;
|
|
/// <summary>
|
/// 旋转之前右下角坐标
|
/// </summary>
|
public PointF BeforeRightBottom
|
{
|
get { return _beforeRightBottom; }
|
private set { _beforeRightBottom = value; }
|
}
|
private PointF _beforeRightBottom;
|
|
/// <summary>
|
/// 旋转之后左上角点坐标
|
/// </summary>
|
public PointF AfterLeftTop
|
{
|
get { return _afterLeftTop; }
|
private set { _afterLeftTop = value; }
|
}
|
private PointF _afterLeftTop;
|
|
/// <summary>
|
/// 旋转之后右上角坐标
|
/// </summary>
|
public PointF AfterRightTop
|
{
|
get { return _afterRightTop; }
|
private set { _afterRightTop = value; }
|
}
|
private PointF _afterRightTop;
|
|
/// <summary>
|
/// 旋转之后左下角
|
/// </summary>
|
public PointF AfterLeftBottom
|
{
|
get { return _afterLeftBottom; }
|
private set { _afterLeftBottom = value; }
|
}
|
private PointF _afterLeftBottom;
|
|
/// <summary>
|
/// 旋转之后右下角
|
/// </summary>
|
public PointF AfterRightBottom
|
{
|
get { return _afterRightBottom; }
|
set { _afterRightBottom = value; }
|
}
|
private PointF _afterRightBottom;
|
|
/// <summary>
|
/// 获取图片文本坐标对象
|
/// </summary>
|
/// <param name="origin">旋转中心点</param>
|
/// <param name="angle">旋转角度(顺时针)</param>
|
/// <param name="size">图片文本的尺寸</param>
|
/// <param name="horiz">水平定位方式</param>
|
/// <param name="veriz">垂直定位方式</param>
|
/// <returns>图片文本坐标对象</returns>
|
public static Coordinate GetCoordinate(PointF origin, float angle, SizeF size, StringAlignment horiz = StringAlignment.Near, StringAlignment veriz = StringAlignment.Near)
|
{
|
return new Coordinate(origin, angle, size, horiz, veriz);
|
}
|
|
|
}
|
|
}
|