using System.Drawing; namespace CoreUnit.Control.UserControl.Canvas { public class SnapPointBase : ISnapPoint { protected UnitPoint m_snappoint; protected RectangleF m_boundingRect; protected IDrawObject m_owner; public IDrawObject Owner { get { return m_owner; } } public SnapPointBase(ICanvas canvas, IDrawObject owner, UnitPoint snappoint) { m_owner = owner; m_snappoint = snappoint; float size = (float)canvas.ToUnit(14); m_boundingRect.X = (float)(snappoint.X - size / 2); m_boundingRect.Y = (float)(snappoint.Y - size / 2); m_boundingRect.Width = size; m_boundingRect.Height = size; } #region ISnapPoint Members public virtual UnitPoint SnapPoint { get { return m_snappoint; } } public virtual RectangleF BoundingRect { get { return m_boundingRect; } } public virtual void Draw(ICanvas canvas) { } #endregion protected void DrawPoint(ICanvas canvas, Pen pen, Brush fillBrush) { Rectangle screenrect = ScreenUtils.ConvertRect(ScreenUtils.ToScreenNormalized(canvas, m_boundingRect)); canvas.Graphics.DrawRectangle(pen, screenrect); screenrect.X++; screenrect.Y++; screenrect.Width--; screenrect.Height--; if (fillBrush != null) canvas.Graphics.FillRectangle(fillBrush, screenrect); } } public class GridSnapPoint : SnapPointBase { public GridSnapPoint(ICanvas canvas, UnitPoint snappoint) : base(canvas, null, snappoint) { } #region ISnapPoint Members public override void Draw(ICanvas canvas) { DrawPoint(canvas, Pens.Gray, null); } #endregion } public class VertextSnapPoint : SnapPointBase { public VertextSnapPoint(ICanvas canvas, IDrawObject owner, UnitPoint snappoint) : base(canvas, owner, snappoint) { } public override void Draw(ICanvas canvas) { DrawPoint(canvas, Pens.Blue, Brushes.YellowGreen); } } public class MidpointSnapPoint : SnapPointBase { public MidpointSnapPoint(ICanvas canvas, IDrawObject owner, UnitPoint snappoint) : base(canvas, owner, snappoint) { } public override void Draw(ICanvas canvas) { DrawPoint(canvas, Pens.White, Brushes.YellowGreen); } } public class IntersectSnapPoint : SnapPointBase { public IntersectSnapPoint(ICanvas canvas, IDrawObject owner, UnitPoint snappoint) : base(canvas, owner, snappoint) { } public override void Draw(ICanvas canvas) { DrawPoint(canvas, Pens.White, Brushes.YellowGreen); } } public class NearestSnapPoint : SnapPointBase { public NearestSnapPoint(ICanvas canvas, IDrawObject owner, UnitPoint snappoint) : base(canvas, owner, snappoint) { } #region ISnapPoint Members public override void Draw(ICanvas canvas) { DrawPoint(canvas, Pens.White, Brushes.YellowGreen); } #endregion } public class QuadrantSnapPoint : SnapPointBase { public QuadrantSnapPoint(ICanvas canvas, IDrawObject owner, UnitPoint snappoint) : base(canvas, owner, snappoint) { } public override void Draw(ICanvas canvas) { DrawPoint(canvas, Pens.White, Brushes.YellowGreen); } } public class DivisionSnapPoint : SnapPointBase { public DivisionSnapPoint(ICanvas canvas, IDrawObject owner, UnitPoint snappoint) : base(canvas, owner, snappoint) { } public override void Draw(ICanvas canvas) { DrawPoint(canvas, Pens.White, Brushes.YellowGreen); } } public class CenterSnapPoint : SnapPointBase { public CenterSnapPoint(ICanvas canvas, IDrawObject owner, UnitPoint snappoint) : base(canvas, owner, snappoint) { } public override void Draw(ICanvas canvas) { DrawPoint(canvas, Pens.White, Brushes.YellowGreen); } } public class PerpendicularSnapPoint : SnapPointBase { public PerpendicularSnapPoint(ICanvas canvas, IDrawObject owner, UnitPoint snappoint) : base(canvas, owner, snappoint) { } public override void Draw(ICanvas canvas) { DrawPoint(canvas, Pens.White, Brushes.YellowGreen); } } public class TangentSnapPoint : SnapPointBase { public TangentSnapPoint(ICanvas canvas, IDrawObject owner, UnitPoint snappoint) : base(canvas, owner, snappoint) { } public override void Draw(ICanvas canvas) { DrawPoint(canvas, Pens.White, Brushes.YellowGreen); } } }