using PaintDotNet.Annotation.Enum;
using PaintDotNet.Annotation.Label;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace PaintDotNet.Annotation.Other
{
///
/// 二值提取-交互操作-删除-多边形
///
public class DrawBinaryAddTrack : DrawObject
{
public List pointArray = new List();
public DrawBinaryAddTrack(ISurfaceBox surfaceBox, int x, int y) : base()
{
this.objectType = DrawClass.Interaction;
this.drawToolType = DrawToolType.BinaryAddTrack;
pointArray.Add(new Point(x, y));
startPoint.X = x;
startPoint.Y = y;
this.rectangle.X = x;
this.rectangle.Y = y;
Initialize();
}
public override DrawObject Clone()
{
return null;
}
public override void Draw(Graphics g)
{
if (HandleCount >= 2)
{
g.SmoothingMode = SmoothingMode.AntiAlias;
Color color = Color.Red;
Pen pen = new Pen(color, PenWidth);
int penWidth = 3;
pen.DashStyle = DashStyle.Dot;
pen.Width = penWidth;
Color fillColor = Color.Transparent;
SolidBrush fillBrush = new SolidBrush(fillColor);
g.FillPolygon(fillBrush, pointArray.ToArray());
g.DrawLines(pen, pointArray.ToArray());
pen.Dispose();
fillBrush.Dispose();
}
}
public override int HandleCount
{
get
{
return pointArray.Count;
}
}
public override RectangleF GetBoundingBox()
{
return rectangle;
}
///
/// Move handle to new pointscroll (resizing)
///
///
///
public override void MoveHandleTo(Point point, int handleNumber)
{
float left = Rectangle.Left;
float top = Rectangle.Top;
float right = Rectangle.Right;
float bottom = Rectangle.Bottom;
switch (handleNumber)
{
case 1:
left = point.X;
top = point.Y;
break;
case 2:
top = point.Y;
break;
case 3:
right = point.X;
top = point.Y;
break;
case 4:
right = point.X;
break;
case 5:
right = point.X;
bottom = point.Y;
break;
case 6:
bottom = point.Y;
break;
case 7:
left = point.X;
bottom = point.Y;
break;
case 8:
left = point.X;
break;
}
SetRectangle(left, top, right - left, bottom - top);
}
protected void SetRectangle(float x, float y, float width, float height)
{
this.rectangle.X = x;
this.rectangle.Y = y;
this.rectangle.Width = width;
this.rectangle.Height = height;
}
public void AddPoint(Point point)
{
pointArray.Add(point);
}
internal void setNextPoint(Point p)
{
AddPoint(p);
startPoint = endPoint;
endPoint = p;
}
}
}