ToolMeasureRandRectangle.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. 
  2. using PaintDotNet.Annotation.Enum;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5. namespace PaintDotNet.Annotation.Measure
  6. {
  7. /// <summary>
  8. /// 测量->多边形测量->任意矩形
  9. /// </summary>
  10. public class ToolMeasureRandRectangle : ToolMeasureObject
  11. {
  12. private static MeasureRandRectangle newRandRectangle;
  13. private static int clickCount = 0;
  14. public static void OnMouseDown(ISurfaceBox drawArea, MouseEventArgs e)
  15. {
  16. if (e.Button == MouseButtons.Left && e.Clicks != 2)
  17. {
  18. Point p = GetEventPointInArea(drawArea, e.Location);
  19. if (newRandRectangle == null)
  20. {
  21. newRandRectangle = new MeasureRandRectangle(drawArea, p.X, p.Y, p.X + 1, p.Y + 1, true);
  22. newRandRectangle.ISurfaceBox = drawArea;
  23. AddNewObject(drawArea, newRandRectangle);
  24. clickCount++;
  25. }
  26. else
  27. {
  28. clickCount++;
  29. if (clickCount == 3)
  30. {
  31. newRandRectangle.pointChange = false;
  32. //newRandRectangle.CalcSlope();
  33. //newRandRectangle.CalcCenter();
  34. //newRandRectangle.finish = true;
  35. clickCount = 0;
  36. newRandRectangle = null;
  37. OnMouseUpTwo(drawArea, e);
  38. if (!drawArea.ContinuousDrawingMeasure())
  39. drawArea.ActiveTool = DrawToolType.Pointer;
  40. }
  41. }
  42. }
  43. else
  44. {
  45. if(newRandRectangle != null)
  46. {
  47. if ((e.Clicks == 1 && clickCount == 1) || (e.Clicks == 2 && clickCount < 3))
  48. {
  49. for (int i = 0; i < drawArea.GraphicsList.Count; i++)
  50. {
  51. if (drawArea.GraphicsList[i].drawToolType == newRandRectangle.drawToolType)
  52. {
  53. drawArea.GraphicsList.RemoveAt(i);
  54. break;
  55. }
  56. }
  57. }
  58. }
  59. OnMouseNotLeftDown(drawArea, newRandRectangle);
  60. if (newRandRectangle != null)
  61. newRandRectangle.pointChange = false;
  62. //newRandRectangle.CalcSlope();
  63. //newRandRectangle.CalcCenter();
  64. //newRandRectangle.finish = true;
  65. clickCount = 0;
  66. newRandRectangle = null;
  67. OnMouseUpTwo(drawArea, e);
  68. if (!drawArea.ContinuousDrawingMeasure())
  69. {
  70. drawArea.ActiveTool = DrawToolType.Pointer;
  71. }
  72. }
  73. }
  74. /// <summary>
  75. /// 鼠标移动,需要进行绘制
  76. /// </summary>
  77. /// <param name="drawArea"></param>
  78. /// <param name="e"></param>
  79. public static void OnMouseMove(ISurfaceBox drawArea, MouseEventArgs e)
  80. {
  81. Point pointscroll = GetEventPointInArea(drawArea, e.Location);
  82. //if (e.Button == MouseButtons.Left)
  83. {
  84. if (drawArea.GraphicsList[0] != null)
  85. {
  86. if(clickCount == 1)
  87. {
  88. drawArea.GraphicsList[0].MoveHandleTo(pointscroll, 2);
  89. }
  90. else if(clickCount == 2)
  91. {
  92. drawArea.GraphicsList[0].MoveHandleTo(pointscroll, 3);
  93. }
  94. drawArea.Refresh();
  95. drawArea.GraphicsList.Dirty = true;
  96. }
  97. }
  98. }
  99. /// <summary>
  100. /// 鼠标抬起事件
  101. /// </summary>
  102. /// <param name="drawArea"></param>
  103. /// <param name="e"></param>
  104. public static void OnMouseUp(ISurfaceBox drawArea, MouseEventArgs e)
  105. {
  106. }
  107. public static void OnMouseClick(ISurfaceBox drawArea, MouseEventArgs e)
  108. {
  109. }
  110. /// <summary>
  111. /// 鼠标左键双击
  112. /// </summary>
  113. /// <param name="drawArea"></param>
  114. /// <param name="e"></param>
  115. public static void OnMouseLeftDoubleClick(ISurfaceBox surfacebox, MouseEventArgs e)
  116. {
  117. }
  118. /// <summary>
  119. /// 删除按键
  120. /// </summary>
  121. /// <param name="surfacebox"></param>
  122. /// <param name="e"></param>
  123. public static void OnDelKeyDown(ISurfaceBox surfacebox, MouseEventArgs e)
  124. {
  125. }
  126. /// <summary>
  127. /// 删除划痕处理&污迹处理选择区域的痕迹
  128. /// </summary>
  129. /// <param name="surfacebox"></param>
  130. /// <param name="e"></param>
  131. public static void OnDel2KeyDown(ISurfaceBox surfacebox, MouseEventArgs e)
  132. {
  133. }
  134. /// <summary>
  135. /// 清空全部时调用该方法,将可能未绘制完的对象清空
  136. /// </summary>
  137. public static void beginWithNewObject()
  138. {
  139. newRandRectangle = null;
  140. clickCount = 0;
  141. }
  142. }
  143. }