using System; using System.Drawing; using System.Drawing.Imaging; using System.Collections.Generic; namespace Assistance { public class ActivePoint { public enum Mode { Common = 0, Active = 1 } public enum Type { Circle, CircleFill, CircleCross, }; public static readonly double radius = 10.0; public static readonly double crossSize = 1.2*radius; public static readonly Pen[] pens = new Pen[] { Pens.Gray, Pens.Blue }; public static readonly Brush[] brushes = new Brush[] { Brushes.LightGray, Brushes.LightBlue }; public readonly Workarea canvas; public readonly Assistant assistant; public readonly Type type; public Point position; public ActivePoint(Assistant assistant, Type type, Point position = new Point()) { this.canvas = assistant.canvas; this.assistant = assistant; this.type = type; this.position = position; canvas.points.Add(this); assistant.points.Add(this); } public bool isInside(Point p) { return (position - p).lenSqr() <= radius*radius; } public void bringToFront() { assistant.bringToFront(); assistant.points.Remove(this); assistant.points.Add(this); canvas.points.Remove(this); canvas.points.Add(this); } private void drawCircle(Graphics g, Mode mode) { g.DrawEllipse(pens[(int)mode], (float)(position.x - radius), (float)(position.y - radius), (float)(2.0*radius), (float)(2.0*radius)); } private void fillCircle(Graphics g, Mode mode) { g.FillEllipse(brushes[(int)mode], (float)(position.x - radius), (float)(position.y - radius), (float)(2.0*radius), (float)(2.0*radius)); } private void drawCross(Graphics g, Mode mode) { g.DrawLine(pens[(int)mode], (float)(position.x - crossSize), (float)position.y, (float)(position.x + crossSize), (float)position.y); g.DrawLine(pens[(int)mode], (float)position.x, (float)(position.y - crossSize), (float)position.x, (float)(position.y + crossSize)); } public void draw(Graphics g, Mode mode) { switch(type) { case Type.Circle: drawCircle(g, mode); break; case Type.CircleFill: fillCircle(g, mode); drawCircle(g, mode); break; case Type.CircleCross: drawCircle(g, mode); drawCross(g, mode); break; } } } }