using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
namespace Eventech.DynPicture.Model
{
///
/// 图片文本坐标
///
public class ImageInfoCoordinate
{
///
/// 唯一构造函数(内部计算)
///
/// 旋转中心点
/// 旋转角度(顺时针)
/// 图片文本的尺寸
/// 水平定位方式
/// 垂直定位方式
public ImageInfoCoordinate(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);
}
///
/// 旋转中心点
///
public PointF Origin
{
get { return _origin; }
private set { _origin = value; }
}
private PointF _origin;
///
/// 旋转角度
///
public float Angle
{
get { return _angle; }
private set { _angle = value; }
}
private float _angle;
///
/// 尺寸
///
public SizeF Size
{
get { return _size; }
private set { _size = value; }
}
private SizeF _size;
///
/// 水平方向
///
public StringAlignment HorizAlignment
{
get { return _horizAlignment; }
private set { _horizAlignment = value; }
}
private StringAlignment _horizAlignment;
///
/// 垂直方向
///
public StringAlignment VertiAlignment
{
get { return _vertiAlignment; }
private set { _vertiAlignment = value; }
}
private StringAlignment _vertiAlignment;
///
/// 旋转之前的矩形
///
public RectangleF BeforeRectf
{
get { return _beforeRectf; }
private set { _beforeRectf = value; }
}
private RectangleF _beforeRectf;
///
/// 旋转之前左上角点坐标
///
public PointF BeforeLeftTop
{
get { return _beforeLeftTop; }
private set { _beforeLeftTop = value; }
}
private PointF _beforeLeftTop;
///
/// 旋转之前右上点坐标
///
public PointF BeforeRightTop
{
get { return _beforeRightTop; }
private set { _beforeRightTop = value; }
}
private PointF _beforeRightTop;
///
/// 旋转之前左下角点坐标
///
public PointF BeforeLeftBottom
{
get { return _beforeLeftBottom; }
private set { _beforeLeftBottom = value; }
}
private PointF _beforeLeftBottom;
///
/// 旋转之前右下角坐标
///
public PointF BeforeRightBottom
{
get { return _beforeRightBottom; }
private set { _beforeRightBottom = value; }
}
private PointF _beforeRightBottom;
///
/// 旋转之后左上角点坐标
///
public PointF AfterLeftTop
{
get { return _afterLeftTop; }
private set { _afterLeftTop = value; }
}
private PointF _afterLeftTop;
///
/// 旋转之后右上角坐标
///
public PointF AfterRightTop
{
get { return _afterRightTop; }
private set { _afterRightTop = value; }
}
private PointF _afterRightTop;
///
/// 旋转之后左下角
///
public PointF AfterLeftBottom
{
get { return _afterLeftBottom; }
private set { _afterLeftBottom = value; }
}
private PointF _afterLeftBottom;
///
/// 旋转之后右下角
///
public PointF AfterRightBottom
{
get { return _afterRightBottom; }
set { _afterRightBottom = value; }
}
private PointF _afterRightBottom;
///
/// 获取图片文本坐标对象
///
/// 旋转中心点
/// 旋转角度(顺时针)
/// 图片文本的尺寸
/// 水平定位方式
/// 垂直定位方式
/// 图片文本坐标对象
public static ImageInfoCoordinate GetCoordinate(PointF origin, float angle, SizeF size, StringAlignment horiz = StringAlignment.Near, StringAlignment veriz = StringAlignment.Near)
{
return new ImageInfoCoordinate(origin, angle, size, horiz, veriz);
}
}
}