using System;
|
using System.Collections.Generic;
|
using System.Drawing;
|
using System.Linq;
|
using System.Text;
|
|
namespace Eventech.DynPicture.Model
|
{
|
/// <summary>
|
/// 图片标注信息
|
/// </summary>
|
public class PictureMarkInfo: IPictureBaseInfo, ICloneable
|
{
|
public PictureMarkInfo() { }
|
public PictureMarkInfo(PictureMarkInfo rhs)
|
{
|
#region base
|
this.ID = rhs.ID;
|
this.Name = rhs.Name;
|
this.AllowEdit = rhs.AllowEdit;
|
this.InfoType = rhs.InfoType;
|
this.Level = rhs.Level;
|
this.Description = rhs.Description;
|
this.Tag = rhs.Tag;
|
#endregion
|
|
this.StartPointF = rhs.StartPointF;
|
this.EndPointF = rhs.EndPointF;
|
this.ExtendPointF = rhs.ExtendPointF;
|
|
#region Line
|
this.LineColor = rhs.LineColor;
|
this.LineWidth = rhs.LineWidth;
|
this.LineExtendLength = rhs.LineExtendLength;
|
#endregion
|
|
#region Arrow
|
this.ArrowDirection = rhs.ArrowDirection;
|
this.ArrowLength = rhs.ArrowLength;
|
this.ArrowWidth = rhs.ArrowWidth;
|
this.ArrowColor = rhs.ArrowColor;
|
#endregion
|
}
|
|
#region 图片信息基础属性
|
|
/// <summary>
|
/// 唯一标识
|
/// </summary>
|
public long ID { get; set; }
|
|
/// <summary>
|
/// 名称
|
/// </summary>
|
public string Name { get; set; }
|
|
/// <summary>
|
/// 是否允许修改
|
/// </summary>
|
public bool AllowEdit { get; set; }
|
|
/// <summary>
|
/// 获取图片信息类型
|
/// </summary>
|
public ePictureInfoType InfoType
|
{
|
get { return _infoType; }
|
private set { _infoType = value; }
|
}
|
private ePictureInfoType _infoType = ePictureInfoType.Mark;
|
|
/// <summary>
|
/// 图层
|
/// </summary>
|
public int Level { get; set; }
|
|
/// <summary>
|
/// 描述
|
/// </summary>
|
public virtual string Description { get; set; }
|
|
/// <summary>
|
/// 标签
|
/// </summary>
|
public virtual string Tag { get; set; }
|
|
#endregion
|
|
/// <summary>
|
/// 开始点
|
/// </summary>
|
public PointF StartPointF { get; set; }
|
|
/// <summary>
|
/// 结束点
|
/// </summary>
|
public PointF EndPointF { get; set; }
|
|
/// <summary>
|
/// 延申点
|
/// </summary>
|
public PointF ExtendPointF { get; set; }
|
|
|
#region Line
|
/// <summary>
|
/// 线延申长度
|
/// </summary>
|
public float LineExtendLength
|
{
|
get { return _lineExtendLength; }
|
set { _lineExtendLength = value; }
|
}
|
private float _lineExtendLength = XmlConfigInfo.ConfigInfo.LineExtendLength;
|
|
/// <summary>
|
/// 线宽
|
/// </summary>
|
public float LineWidth
|
{
|
get { return _lineWidth; }
|
set { _lineWidth = value; }
|
}
|
private float _lineWidth = XmlConfigInfo.ConfigInfo.LineWidth;
|
|
/// <summary>
|
/// 线色
|
/// </summary>
|
public Color LineColor
|
{
|
get { return _lineColor; }
|
set { _lineColor = value; }
|
}
|
private Color _lineColor = XmlConfigInfo.ConfigInfo.LineColor;
|
#endregion
|
|
#region arrow
|
|
/// <summary>
|
/// 箭头方向
|
/// </summary>
|
public eArrowDirection ArrowDirection
|
{
|
get { return _arrowDirection; }
|
set { _arrowDirection = value; }
|
}
|
private eArrowDirection _arrowDirection =XmlConfigInfo.ConfigInfo.ArrowDirection ;
|
|
/// <summary>
|
/// 箭头长度
|
/// </summary>
|
public float ArrowLength
|
{
|
get { return _arrowLength; }
|
set { _arrowLength = value; }
|
}
|
private float _arrowLength = XmlConfigInfo.ConfigInfo.ArrowLength;
|
|
/// <summary>
|
/// 箭头宽度
|
/// </summary>
|
public float ArrowWidth
|
{
|
get { return _arrowWidth; }
|
set { _arrowWidth = value; }
|
}
|
private float _arrowWidth = XmlConfigInfo.ConfigInfo.ArrowWidth;
|
|
|
/// <summary>
|
/// 箭头颜色
|
/// </summary>
|
public Color ArrowColor
|
{
|
get { return _arrowColor; }
|
set { _arrowColor = value; }
|
}
|
private Color _arrowColor = XmlConfigInfo.ConfigInfo.ArrowColor;
|
#endregion
|
|
#region Clone
|
/// <summary>
|
///
|
/// </summary>
|
/// <returns></returns>
|
public PictureMarkInfo Clone()
|
{
|
return new PictureMarkInfo(this);
|
}
|
object ICloneable.Clone()
|
{
|
return this.Clone();
|
}
|
|
#endregion Clone
|
|
public ImageInfoCoordinate GetCoordinate(Graphics g)
|
{
|
PointF pf = new PointF();
|
SizeF sf = new SizeF();
|
StringAlignment horiz=StringAlignment.Near;
|
StringAlignment verti=StringAlignment.Near;
|
|
var condition1=this.ExtendPointF.X > this.StartPointF.X && this.ExtendPointF.X > this.EndPointF.X;
|
var condition2=this.ExtendPointF.X < this.StartPointF.X && this.ExtendPointF.X < this.EndPointF.X;
|
var conditon3=this.ExtendPointF.Y > this.StartPointF.Y && this.ExtendPointF.Y > this.EndPointF.Y;
|
var condition4 = this.ExtendPointF.Y < this.StartPointF.Y && this.ExtendPointF.Y < this.EndPointF.Y;
|
if(condition1||condition2)
|
{
|
pf.X = this.ExtendPointF.X;
|
pf.Y = this.StartPointF.Y > this.EndPointF.Y ? this.EndPointF.Y : this.StartPointF.Y;
|
sf.Width = 2 * XmlConfigInfo.ConfigInfo.LineShadow;
|
sf.Height =Math.Abs(this.EndPointF.Y-this.StartPointF.Y);
|
horiz=StringAlignment.Center;
|
verti=StringAlignment.Near;
|
}
|
else if(conditon3||condition4)
|
{
|
pf.Y=this.ExtendPointF.Y;
|
pf.X=this.StartPointF.X>this.EndPointF.X?this.EndPointF.X:this.StartPointF.X;
|
sf.Height = 2 * XmlConfigInfo.ConfigInfo.LineShadow;
|
sf.Width=Math.Abs(this.EndPointF.X-this.StartPointF.X);
|
horiz=StringAlignment.Near;
|
verti=StringAlignment.Center;
|
}
|
return new ImageInfoCoordinate(pf,0,sf,horiz,verti);
|
}
|
|
public void DrawInfo(Graphics g, ImageInfoCoordinate coordinate)
|
{
|
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
|
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
|
using (var pen = new Pen(this.ArrowColor, this.LineWidth))
|
using (var bru = new SolidBrush(this.ArrowColor))
|
{
|
var condition1 = this.ExtendPointF.X > this.StartPointF.X && this.ExtendPointF.X > this.EndPointF.X;
|
var condition2 = this.ExtendPointF.X < this.StartPointF.X && this.ExtendPointF.X < this.EndPointF.X;
|
var conditon3 = this.ExtendPointF.Y > this.StartPointF.Y && this.ExtendPointF.Y > this.EndPointF.Y;
|
var condition4 = this.ExtendPointF.Y < this.StartPointF.Y && this.ExtendPointF.Y < this.EndPointF.Y;
|
if (condition1)
|
{
|
g.DrawLine(pen, this.StartPointF, new PointF(this.ExtendPointF.X + this.LineExtendLength, this.StartPointF.Y));
|
g.DrawLine(pen, this.EndPointF, new PointF(this.ExtendPointF.X + this.LineExtendLength, this.EndPointF.Y));
|
|
var x = this.ExtendPointF.X;
|
var minY = this.StartPointF.Y > this.EndPointF.Y ? this.EndPointF.Y : this.StartPointF.Y;
|
var maxY = this.StartPointF.Y > this.EndPointF.Y ? this.StartPointF.Y : this.EndPointF.Y;
|
var minY0 = this.ArrowDirection == eArrowDirection.Inner ? minY - this.LineExtendLength : minY - this.ArrowLength - this.LineExtendLength;
|
var maxY0 = this.ArrowDirection == eArrowDirection.Inner ? maxY + this.LineExtendLength : maxY + this.ArrowLength + this.LineExtendLength;
|
var halfMarkLineWidth = this.LineWidth / 2;
|
var halfArrowWidth = this.ArrowWidth / 2;
|
|
var pl1 = new PointF(x-halfMarkLineWidth,minY0);
|
var pl2 = new PointF(x+halfMarkLineWidth,minY0);
|
var pl3 = new PointF(x+halfMarkLineWidth,maxY0);
|
var pl4 = new PointF(x-halfMarkLineWidth,maxY0);
|
var ps = new PointF[] { pl1, pl2, pl3, pl4 };
|
g.FillPolygon(bru, ps);
|
|
if (this.ArrowDirection == eArrowDirection.Inner)
|
{
|
var pit1 = new PointF(x,minY);
|
var pit2 = new PointF(x+halfArrowWidth,minY+this.ArrowLength);
|
var pit3 = new PointF(x-halfArrowWidth,minY+this.ArrowLength);
|
var pits = new PointF[] { pit1,pit2,pit3};
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(x,maxY);
|
var pib2 = new PointF(x+halfArrowWidth,maxY-this.ArrowLength);
|
var pib3 = new PointF(x-halfArrowWidth,maxY-this.ArrowLength);
|
var pibs = new PointF[] { pib1,pib2,pib3};
|
g.FillPolygon(bru, pibs);
|
}
|
else if (this.ArrowDirection == eArrowDirection.Outer)
|
{
|
var pit1 = new PointF(x, minY);
|
var pit2 = new PointF(x + halfArrowWidth, minY - this.ArrowLength);
|
var pit3 = new PointF(x - halfArrowWidth, minY - this.ArrowLength);
|
var pits = new PointF[] { pit1, pit2, pit3 };
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(x, maxY);
|
var pib2 = new PointF(x + halfArrowWidth, maxY + this.ArrowLength);
|
var pib3 = new PointF(x - halfArrowWidth, maxY + this.ArrowLength);
|
var pibs = new PointF[] { pib1, pib2, pib3 };
|
g.FillPolygon(bru, pibs);
|
}
|
}
|
else if (condition2)
|
{
|
g.DrawLine(pen, this.StartPointF, new PointF(this.ExtendPointF.X - this.LineExtendLength, this.StartPointF.Y));
|
g.DrawLine(pen, this.EndPointF, new PointF(this.ExtendPointF.X - this.LineExtendLength, this.EndPointF.Y));
|
|
var x = this.ExtendPointF.X;
|
var minY = this.StartPointF.Y > this.EndPointF.Y ? this.EndPointF.Y : this.StartPointF.Y;
|
var maxY = this.StartPointF.Y > this.EndPointF.Y ? this.StartPointF.Y : this.EndPointF.Y;
|
var minY0 = this.ArrowDirection == eArrowDirection.Inner ? minY - this.LineExtendLength : minY - this.ArrowLength - this.LineExtendLength;
|
var maxY0 = this.ArrowDirection == eArrowDirection.Inner ? maxY + this.LineExtendLength : maxY + this.ArrowLength + this.LineExtendLength;
|
var halfMarkLineWidth = this.LineWidth / 2;
|
var halfArrowWidth = this.ArrowWidth / 2;
|
|
var pl1 = new PointF(x - halfMarkLineWidth, minY0);
|
var pl2 = new PointF(x + halfMarkLineWidth, minY0);
|
var pl3 = new PointF(x + halfMarkLineWidth, maxY0);
|
var pl4 = new PointF(x - halfMarkLineWidth, maxY0);
|
var ps = new PointF[] { pl1, pl2, pl3, pl4 };
|
g.FillPolygon(bru, ps);
|
|
if (this.ArrowDirection == eArrowDirection.Inner)
|
{
|
var pit1 = new PointF(x, minY);
|
var pit2 = new PointF(x + halfArrowWidth, minY + this.ArrowLength);
|
var pit3 = new PointF(x - halfArrowWidth, minY + this.ArrowLength);
|
var pits = new PointF[] { pit1, pit2, pit3 };
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(x, maxY);
|
var pib2 = new PointF(x + halfArrowWidth, maxY - this.ArrowLength);
|
var pib3 = new PointF(x - halfArrowWidth, maxY - this.ArrowLength);
|
var pibs = new PointF[] { pib1, pib2, pib3 };
|
g.FillPolygon(bru, pibs);
|
}
|
else if (this.ArrowDirection == eArrowDirection.Outer)
|
{
|
var pit1 = new PointF(x, minY);
|
var pit2 = new PointF(x + halfArrowWidth, minY - this.ArrowLength);
|
var pit3 = new PointF(x - halfArrowWidth, minY - this.ArrowLength);
|
var pits = new PointF[] { pit1, pit2, pit3 };
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(x, maxY);
|
var pib2 = new PointF(x + halfArrowWidth, maxY + this.ArrowLength);
|
var pib3 = new PointF(x - halfArrowWidth, maxY + this.ArrowLength);
|
var pibs = new PointF[] { pib1, pib2, pib3 };
|
g.FillPolygon(bru, pibs);
|
}
|
}
|
else if (conditon3)
|
{
|
g.DrawLine(pen, this.StartPointF, new PointF(this.StartPointF.X,this.ExtendPointF.Y+this.LineExtendLength));
|
g.DrawLine(pen, this.EndPointF, new PointF(this.EndPointF.X, this.ExtendPointF.Y+this.LineExtendLength));
|
|
var y = this.ExtendPointF.Y;
|
var minX=this.StartPointF.X>this.EndPointF.X?this.EndPointF.X:this.StartPointF.X;
|
var maxX = this.StartPointF.X > this.EndPointF.X ? this.StartPointF.X : this.EndPointF.X;
|
var minX0 = this.ArrowDirection == eArrowDirection.Inner ? minX - this.LineExtendLength : minX - this.ArrowLength - this.LineExtendLength;
|
var maxX0 = this.ArrowDirection == eArrowDirection.Inner ? maxX + this.LineExtendLength : maxX + this.ArrowLength + this.LineExtendLength;
|
var halfMarkLineWidth = this.LineWidth / 2;
|
var halfArrowWidth = this.ArrowWidth / 2;
|
|
var pl1 = new PointF(minX0,y-halfMarkLineWidth);
|
var pl2 = new PointF(minX0,y+halfMarkLineWidth);
|
var pl3 = new PointF(maxX0,y+halfMarkLineWidth);
|
var pl4 = new PointF(maxX0,y-halfMarkLineWidth);
|
var ps = new PointF[] { pl1, pl2, pl3, pl4 };
|
g.FillPolygon(bru, ps);
|
|
if (this.ArrowDirection == eArrowDirection.Inner)
|
{
|
var pit1 = new PointF(minX,y);
|
var pit2 = new PointF(minX+this.ArrowLength,y+halfArrowWidth);
|
var pit3 = new PointF(minX + this.ArrowLength, y - halfArrowWidth);
|
var pits = new PointF[] { pit1, pit2, pit3 };
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(maxX,y);
|
var pib2 = new PointF(maxX-this.ArrowLength, y+halfArrowWidth);
|
var pib3 = new PointF(maxX - this.ArrowLength, y - halfArrowWidth);
|
var pibs = new PointF[] { pib1, pib2, pib3 };
|
g.FillPolygon(bru, pibs);
|
}
|
else if (this.ArrowDirection == eArrowDirection.Outer)
|
{
|
var pit1 = new PointF(minX, y);
|
var pit2 = new PointF(minX - this.ArrowLength, y + halfArrowWidth);
|
var pit3 = new PointF(minX - this.ArrowLength, y - halfArrowWidth);
|
var pits = new PointF[] { pit1, pit2, pit3 };
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(maxX, y);
|
var pib2 = new PointF(maxX + this.ArrowLength, y + halfArrowWidth);
|
var pib3 = new PointF(maxX + this.ArrowLength, y - halfArrowWidth);
|
var pibs = new PointF[] { pib1, pib2, pib3 };
|
g.FillPolygon(bru, pibs);
|
}
|
}
|
else if (condition4)
|
{
|
g.DrawLine(pen, this.StartPointF, new PointF(this.StartPointF.X, this.ExtendPointF.Y - this.LineExtendLength));
|
g.DrawLine(pen, this.EndPointF, new PointF(this.EndPointF.X, this.ExtendPointF.Y - this.LineExtendLength));
|
|
var y = this.ExtendPointF.Y;
|
var minX = this.StartPointF.X > this.EndPointF.X ? this.EndPointF.X : this.StartPointF.X;
|
var maxX = this.StartPointF.X > this.EndPointF.X ? this.StartPointF.X : this.EndPointF.X;
|
var minX0 = this.ArrowDirection == eArrowDirection.Inner ? minX - this.LineExtendLength : minX - this.ArrowLength - this.LineExtendLength;
|
var maxX0 = this.ArrowDirection == eArrowDirection.Inner ? maxX + this.LineExtendLength : maxX + this.ArrowLength + this.LineExtendLength;
|
var halfMarkLineWidth = this.LineWidth / 2;
|
var halfArrowWidth = this.ArrowWidth / 2;
|
|
var pl1 = new PointF(minX0, y - halfMarkLineWidth);
|
var pl2 = new PointF(minX0, y + halfMarkLineWidth);
|
var pl3 = new PointF(maxX0, y + halfMarkLineWidth);
|
var pl4 = new PointF(maxX0, y - halfMarkLineWidth);
|
var ps = new PointF[] { pl1, pl2, pl3, pl4 };
|
g.FillPolygon(bru, ps);
|
|
if (this.ArrowDirection == eArrowDirection.Inner)
|
{
|
var pit1 = new PointF(minX, y);
|
var pit2 = new PointF(minX + this.ArrowLength, y + halfArrowWidth);
|
var pit3 = new PointF(minX + this.ArrowLength, y - halfArrowWidth);
|
var pits = new PointF[] { pit1, pit2, pit3 };
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(maxX, y);
|
var pib2 = new PointF(maxX - this.ArrowLength, y + halfArrowWidth);
|
var pib3 = new PointF(maxX - this.ArrowLength, y - halfArrowWidth);
|
var pibs = new PointF[] { pib1, pib2, pib3 };
|
g.FillPolygon(bru, pibs);
|
}
|
else if (this.ArrowDirection == eArrowDirection.Outer)
|
{
|
var pit1 = new PointF(minX, y);
|
var pit2 = new PointF(minX - this.ArrowLength, y + halfArrowWidth);
|
var pit3 = new PointF(minX - this.ArrowLength, y - halfArrowWidth);
|
var pits = new PointF[] { pit1, pit2, pit3 };
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(maxX, y);
|
var pib2 = new PointF(maxX + this.ArrowLength, y + halfArrowWidth);
|
var pib3 = new PointF(maxX + this.ArrowLength, y - halfArrowWidth);
|
var pibs = new PointF[] { pib1, pib2, pib3 };
|
g.FillPolygon(bru, pibs);
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 绘制高亮外观
|
/// </summary>
|
/// <param name="g"></param>
|
/// <param name="coordinate"></param>
|
/// <param name="func"></param>
|
public void DrawHighlightAppearance(Graphics g, ImageInfoCoordinate coordinate, Func<PointF, PointF> func)
|
{
|
var points = new PointF[5];
|
points[0] = func(coordinate.AfterLeftTop);
|
points[1] = func(coordinate.AfterRightTop);
|
points[2] = func(coordinate.AfterRightBottom);
|
points[3] = func(coordinate.AfterLeftBottom);
|
points[4] = points[0];
|
using (var pen = new Pen(XmlConfigInfo.ConfigInfo.HighlightBorderColor, XmlConfigInfo.ConfigInfo.HighlightBorderWidth))
|
{
|
g.DrawLines(pen, points);
|
}
|
}
|
|
public void IncreaseAxisValue(eAxis axis, float value)
|
{
|
switch (axis)
|
{
|
case eAxis.X:
|
this.StartPointF = new PointF(this.StartPointF.X + value, this.StartPointF.Y);
|
this.EndPointF = new PointF(this.EndPointF.X + value, this.EndPointF.Y);
|
this.ExtendPointF = new PointF(this.ExtendPointF.X + value, this.ExtendPointF.Y);
|
break;
|
case eAxis.Y:
|
this.StartPointF = new PointF(this.StartPointF.X, this.StartPointF.Y + value);
|
this.EndPointF = new PointF(this.EndPointF.X, this.EndPointF.Y + value);
|
this.ExtendPointF = new PointF(this.ExtendPointF.X, this.ExtendPointF.Y + value);
|
break;
|
default: break;
|
}
|
}
|
|
|
|
|
|
|
|
public void DrawInfo2(Graphics g, ImageInfoCoordinate coordinate)
|
{
|
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
|
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
|
using (var pen = new Pen(this.ArrowColor, this.LineWidth))
|
using (var bru = new SolidBrush(this.ArrowColor))
|
{
|
var condition1 = this.ExtendPointF.X > this.StartPointF.X && this.ExtendPointF.X > this.EndPointF.X;
|
var condition2 = this.ExtendPointF.X < this.StartPointF.X && this.ExtendPointF.X < this.EndPointF.X;
|
var conditon3 = this.ExtendPointF.Y > this.StartPointF.Y && this.ExtendPointF.Y > this.EndPointF.Y;
|
var condition4 = this.ExtendPointF.Y < this.StartPointF.Y && this.ExtendPointF.Y < this.EndPointF.Y;
|
if (condition1)
|
{
|
g.DrawLine(pen, this.StartPointF, new PointF(this.ExtendPointF.X + this.LineExtendLength, this.StartPointF.Y));
|
g.DrawLine(pen, this.EndPointF, new PointF(this.ExtendPointF.X + this.LineExtendLength, this.EndPointF.Y));
|
|
var x = this.ExtendPointF.X;
|
var minY = this.StartPointF.Y > this.EndPointF.Y ? this.EndPointF.Y : this.StartPointF.Y;
|
var maxY = this.StartPointF.Y > this.EndPointF.Y ? this.StartPointF.Y : this.EndPointF.Y;
|
var minY0 = this.ArrowDirection == eArrowDirection.Inner ? minY - this.LineExtendLength : minY - this.ArrowLength - this.LineExtendLength;
|
var maxY0 = this.ArrowDirection == eArrowDirection.Inner ? maxY + this.LineExtendLength : maxY + this.ArrowLength + this.LineExtendLength;
|
var halfMarkLineWidth = this.LineWidth / 2;
|
var halfArrowWidth = this.ArrowWidth / 2;
|
|
var pl1 = new PointF(x - halfMarkLineWidth, minY0);
|
var pl2 = new PointF(x + halfMarkLineWidth, minY0);
|
var pl3 = new PointF(x + halfMarkLineWidth, maxY0);
|
var pl4 = new PointF(x - halfMarkLineWidth, maxY0);
|
var ps = new PointF[] { pl1, pl2, pl3, pl4 };
|
g.FillPolygon(bru, ps);
|
|
if (this.ArrowDirection == eArrowDirection.Inner)
|
{
|
var pit1 = new PointF(x, minY);
|
var pit2 = new PointF(x + halfArrowWidth, minY + this.ArrowLength);
|
var pit3 = new PointF(x - halfArrowWidth, minY + this.ArrowLength);
|
var pits = new PointF[] { pit1, pit2, pit3 };
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(x, maxY);
|
var pib2 = new PointF(x + halfArrowWidth, maxY - this.ArrowLength);
|
var pib3 = new PointF(x - halfArrowWidth, maxY - this.ArrowLength);
|
var pibs = new PointF[] { pib1, pib2, pib3 };
|
g.FillPolygon(bru, pibs);
|
}
|
else if (this.ArrowDirection == eArrowDirection.Outer)
|
{
|
var pit1 = new PointF(x, minY);
|
var pit2 = new PointF(x + halfArrowWidth, minY - this.ArrowLength);
|
var pit3 = new PointF(x - halfArrowWidth, minY - this.ArrowLength);
|
var pits = new PointF[] { pit1, pit2, pit3 };
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(x, maxY);
|
var pib2 = new PointF(x + halfArrowWidth, maxY + this.ArrowLength);
|
var pib3 = new PointF(x - halfArrowWidth, maxY + this.ArrowLength);
|
var pibs = new PointF[] { pib1, pib2, pib3 };
|
g.FillPolygon(bru, pibs);
|
}
|
}
|
else if (condition2)
|
{
|
g.DrawLine(pen, this.StartPointF, new PointF(this.ExtendPointF.X - this.LineExtendLength, this.StartPointF.Y));
|
g.DrawLine(pen, this.EndPointF, new PointF(this.ExtendPointF.X - this.LineExtendLength, this.EndPointF.Y));
|
|
var x = this.ExtendPointF.X;
|
var minY = this.StartPointF.Y > this.EndPointF.Y ? this.EndPointF.Y : this.StartPointF.Y;
|
var maxY = this.StartPointF.Y > this.EndPointF.Y ? this.StartPointF.Y : this.EndPointF.Y;
|
var minY0 = this.ArrowDirection == eArrowDirection.Inner ? minY - this.LineExtendLength : minY - this.ArrowLength - this.LineExtendLength;
|
var maxY0 = this.ArrowDirection == eArrowDirection.Inner ? maxY + this.LineExtendLength : maxY + this.ArrowLength + this.LineExtendLength;
|
var halfMarkLineWidth = this.LineWidth / 2;
|
var halfArrowWidth = this.ArrowWidth / 2;
|
|
var pl1 = new PointF(x - halfMarkLineWidth, minY0);
|
var pl2 = new PointF(x + halfMarkLineWidth, minY0);
|
var pl3 = new PointF(x + halfMarkLineWidth, maxY0);
|
var pl4 = new PointF(x - halfMarkLineWidth, maxY0);
|
var ps = new PointF[] { pl1, pl2, pl3, pl4 };
|
g.FillPolygon(bru, ps);
|
|
if (this.ArrowDirection == eArrowDirection.Inner)
|
{
|
var pit1 = new PointF(x, minY);
|
var pit2 = new PointF(x + halfArrowWidth, minY + this.ArrowLength);
|
var pit3 = new PointF(x - halfArrowWidth, minY + this.ArrowLength);
|
var pits = new PointF[] { pit1, pit2, pit3 };
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(x, maxY);
|
var pib2 = new PointF(x + halfArrowWidth, maxY - this.ArrowLength);
|
var pib3 = new PointF(x - halfArrowWidth, maxY - this.ArrowLength);
|
var pibs = new PointF[] { pib1, pib2, pib3 };
|
g.FillPolygon(bru, pibs);
|
}
|
else if (this.ArrowDirection == eArrowDirection.Outer)
|
{
|
var pit1 = new PointF(x, minY);
|
var pit2 = new PointF(x + halfArrowWidth, minY - this.ArrowLength);
|
var pit3 = new PointF(x - halfArrowWidth, minY - this.ArrowLength);
|
var pits = new PointF[] { pit1, pit2, pit3 };
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(x, maxY);
|
var pib2 = new PointF(x + halfArrowWidth, maxY + this.ArrowLength);
|
var pib3 = new PointF(x - halfArrowWidth, maxY + this.ArrowLength);
|
var pibs = new PointF[] { pib1, pib2, pib3 };
|
g.FillPolygon(bru, pibs);
|
}
|
}
|
else if (conditon3)
|
{
|
g.DrawLine(pen, this.StartPointF, new PointF(this.StartPointF.X, this.ExtendPointF.Y + this.LineExtendLength));
|
g.DrawLine(pen, this.EndPointF, new PointF(this.EndPointF.X, this.ExtendPointF.Y + this.LineExtendLength));
|
|
var y = this.ExtendPointF.Y;
|
var minX = this.StartPointF.X > this.EndPointF.X ? this.EndPointF.X : this.StartPointF.X;
|
var maxX = this.StartPointF.X > this.EndPointF.X ? this.StartPointF.X : this.EndPointF.X;
|
var minX0 = this.ArrowDirection == eArrowDirection.Inner ? minX - this.LineExtendLength : minX - this.ArrowLength - this.LineExtendLength;
|
var maxX0 = this.ArrowDirection == eArrowDirection.Inner ? maxX + this.LineExtendLength : maxX + this.ArrowLength + this.LineExtendLength;
|
var halfMarkLineWidth = this.LineWidth / 2;
|
var halfArrowWidth = this.ArrowWidth / 2;
|
|
var pl1 = new PointF(minX0, y - halfMarkLineWidth);
|
var pl2 = new PointF(minX0, y + halfMarkLineWidth);
|
var pl3 = new PointF(maxX0, y + halfMarkLineWidth);
|
var pl4 = new PointF(maxX0, y - halfMarkLineWidth);
|
var ps = new PointF[] { pl1, pl2, pl3, pl4 };
|
g.FillPolygon(bru, ps);
|
|
if (this.ArrowDirection == eArrowDirection.Inner)
|
{
|
var pit1 = new PointF(minX, y);
|
var pit2 = new PointF(minX + this.ArrowLength, y + halfArrowWidth);
|
var pit3 = new PointF(minX + this.ArrowLength, y - halfArrowWidth);
|
var pits = new PointF[] { pit1, pit2, pit3 };
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(maxX, y);
|
var pib2 = new PointF(maxX - this.ArrowLength, y + halfArrowWidth);
|
var pib3 = new PointF(maxX - this.ArrowLength, y - halfArrowWidth);
|
var pibs = new PointF[] { pib1, pib2, pib3 };
|
g.FillPolygon(bru, pibs);
|
}
|
else if (this.ArrowDirection == eArrowDirection.Outer)
|
{
|
var pit1 = new PointF(minX, y);
|
var pit2 = new PointF(minX - this.ArrowLength, y + halfArrowWidth);
|
var pit3 = new PointF(minX - this.ArrowLength, y - halfArrowWidth);
|
var pits = new PointF[] { pit1, pit2, pit3 };
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(maxX, y);
|
var pib2 = new PointF(maxX + this.ArrowLength, y + halfArrowWidth);
|
var pib3 = new PointF(maxX + this.ArrowLength, y - halfArrowWidth);
|
var pibs = new PointF[] { pib1, pib2, pib3 };
|
g.FillPolygon(bru, pibs);
|
}
|
}
|
else if (condition4)
|
{
|
g.DrawLine(pen, this.StartPointF, new PointF(this.StartPointF.X, this.ExtendPointF.Y - this.LineExtendLength));
|
g.DrawLine(pen, this.EndPointF, new PointF(this.EndPointF.X, this.ExtendPointF.Y - this.LineExtendLength));
|
|
var y = this.ExtendPointF.Y;
|
var minX = this.StartPointF.X > this.EndPointF.X ? this.EndPointF.X : this.StartPointF.X;
|
var maxX = this.StartPointF.X > this.EndPointF.X ? this.StartPointF.X : this.EndPointF.X;
|
var minX0 = this.ArrowDirection == eArrowDirection.Inner ? minX - this.LineExtendLength : minX - this.ArrowLength - this.LineExtendLength;
|
var maxX0 = this.ArrowDirection == eArrowDirection.Inner ? maxX + this.LineExtendLength : maxX + this.ArrowLength + this.LineExtendLength;
|
var halfMarkLineWidth = this.LineWidth / 2;
|
var halfArrowWidth = this.ArrowWidth / 2;
|
|
var pl1 = new PointF(minX0, y - halfMarkLineWidth);
|
var pl2 = new PointF(minX0, y + halfMarkLineWidth);
|
var pl3 = new PointF(maxX0, y + halfMarkLineWidth);
|
var pl4 = new PointF(maxX0, y - halfMarkLineWidth);
|
var ps = new PointF[] { pl1, pl2, pl3, pl4 };
|
g.FillPolygon(bru, ps);
|
|
if (this.ArrowDirection == eArrowDirection.Inner)
|
{
|
var pit1 = new PointF(minX, y);
|
var pit2 = new PointF(minX + this.ArrowLength, y + halfArrowWidth);
|
var pit3 = new PointF(minX + this.ArrowLength, y - halfArrowWidth);
|
var pits = new PointF[] { pit1, pit2, pit3 };
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(maxX, y);
|
var pib2 = new PointF(maxX - this.ArrowLength, y + halfArrowWidth);
|
var pib3 = new PointF(maxX - this.ArrowLength, y - halfArrowWidth);
|
var pibs = new PointF[] { pib1, pib2, pib3 };
|
g.FillPolygon(bru, pibs);
|
}
|
else if (this.ArrowDirection == eArrowDirection.Outer)
|
{
|
var pit1 = new PointF(minX, y);
|
var pit2 = new PointF(minX - this.ArrowLength, y + halfArrowWidth);
|
var pit3 = new PointF(minX - this.ArrowLength, y - halfArrowWidth);
|
var pits = new PointF[] { pit1, pit2, pit3 };
|
g.FillPolygon(bru, pits);
|
|
var pib1 = new PointF(maxX, y);
|
var pib2 = new PointF(maxX + this.ArrowLength, y + halfArrowWidth);
|
var pib3 = new PointF(maxX + this.ArrowLength, y - halfArrowWidth);
|
var pibs = new PointF[] { pib1, pib2, pib3 };
|
g.FillPolygon(bru, pibs);
|
}
|
}
|
}
|
}
|
}
|
}
|