DisplayField.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. using OTSCommon.Model;
  2. using OTSIncAReportGraph.Class;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Drawing;
  6. using System.Drawing.Drawing2D;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. namespace OTSIncAReportGraph
  12. {
  13. public class DisplayField
  14. {
  15. Guid m_id;
  16. string m_fieldid;
  17. bool m_IsDragging;
  18. List<DisplayParticle> m_list_dparticle;
  19. private float m_currentZoom=1;
  20. PointF m_ots_point; //按底层设计结构,底层返回的物理坐标位置及大小,OTS坐标大小
  21. RectangleF m_Rect;//最后换算到在显示器上显示的坐标位置大小
  22. PointF m_dragingpoint;//鼠标拖动的位置
  23. private Bitmap m_originalImage;
  24. const int INVALIDPARTICLE= -1;
  25. /// <summary>
  26. /// 构造函数
  27. /// </summary>
  28. public DisplayField(Field fld, int fldwidth, int fldheight,Point screenPos)
  29. {
  30. m_list_dparticle = new List<DisplayParticle>();
  31. m_id = System.Guid.NewGuid();
  32. Point thisfield_point = new Point() { X = fld.FieldPosX, Y = fld.FieldPosY };
  33. FieldID = fld.FieldID.ToString();
  34. SetShow_Rect(new Rectangle(screenPos, new Size(fldwidth, fldheight)));
  35. OTSCoordinatePos = new PointF(thisfield_point.X, thisfield_point.Y);
  36. //先获取该Field中的所有Particle
  37. List<Particle> list_particle;
  38. list_particle = fld.ParticleList;
  39. //然后将取出的数据,转换成Bitmap对象
  40. m_originalImage = DrawFunction.ReadImageFile(fld.FieldImage);
  41. Bitmap dpImage = new Bitmap(fldwidth, fldheight);
  42. //再循环计算所有的Particle对象
  43. foreach (Particle particle in list_particle)
  44. {
  45. //分布图排列图无效颗粒不显示
  46. if (particle.TypeId == INVALIDPARTICLE)
  47. {
  48. continue;
  49. }
  50. //创建DParticle颗粒
  51. DisplayParticle dp = new DisplayParticle(particle,screenPos,m_originalImage,dpImage);
  52. m_list_dparticle.Add(dp);
  53. }
  54. }
  55. public DisplayField(List<DisplayParticle> in_list_dparticle)
  56. {
  57. m_list_dparticle = in_list_dparticle;
  58. }
  59. public void Zoom(float zoomDelta , PointF refPoint)
  60. {
  61. m_Rect.Width += m_Rect.Width/ m_currentZoom * zoomDelta;
  62. m_Rect.Height += m_Rect.Height/ m_currentZoom * zoomDelta;
  63. //锚点缩放补差值计算,得出差值
  64. float xShiftOld = m_Rect.X - refPoint.X;
  65. float yShiftOld = m_Rect.Y - refPoint.Y;
  66. float xShift = m_Rect.X - refPoint.X + xShiftOld/ m_currentZoom * zoomDelta;
  67. float yShift = m_Rect.Y - refPoint.Y + yShiftOld/ m_currentZoom * zoomDelta;
  68. m_Rect.X = refPoint.X + xShift;
  69. m_Rect.Y = refPoint.Y + yShift;
  70. m_currentZoom += zoomDelta;
  71. }
  72. public void DraggingMove(PointF mousePoint)
  73. {
  74. m_Rect = new RectangleF(
  75. m_Rect.Left + Convert.ToSingle((mousePoint.X - DraggingPoint.X)),
  76. m_Rect.Top + Convert.ToSingle((mousePoint.Y - DraggingPoint.Y)),
  77. m_Rect.Width,
  78. m_Rect.Height);
  79. DraggingPoint = mousePoint;
  80. }
  81. public void Move(SizeF xyShift)
  82. {
  83. m_Rect = new RectangleF(
  84. m_Rect.Left- Convert.ToSingle((xyShift.Width)),
  85. m_Rect.Top - Convert.ToSingle((xyShift.Height)),
  86. m_Rect.Width,
  87. m_Rect.Height);
  88. }
  89. public Guid guid { get => m_id; set => m_id = value; }
  90. /// <summary>
  91. /// 是否被拖动标识
  92. /// </summary>
  93. public bool IsDragging { get => m_IsDragging; set => m_IsDragging = value; }
  94. /// <summary>
  95. /// 被拖动到的位置坐标
  96. /// </summary>
  97. public PointF DraggingPoint { get => m_dragingpoint; set => m_dragingpoint = value; }
  98. /// <summary>
  99. /// 与底层对应的ID,这里叫成FieldID
  100. /// </summary>
  101. public string FieldID
  102. {
  103. get { return m_fieldid; }
  104. set { m_fieldid = value; }
  105. }
  106. /// <summary>
  107. /// 包含的Particle列表
  108. /// </summary>
  109. public List<DisplayParticle> List_DParticle
  110. {
  111. get { return m_list_dparticle; }
  112. set { m_list_dparticle = value; }
  113. }
  114. /// <summary>
  115. /// 该Field的OTS坐标及大小
  116. /// </summary>
  117. public PointF OTSCoordinatePos
  118. {
  119. get { return m_ots_point; }
  120. set { m_ots_point = value; }
  121. }
  122. /// <summary>
  123. /// 该Field最后在屏幕上显示的坐标及大小
  124. /// </summary>
  125. public RectangleF GetShowRect()
  126. { return m_Rect; }
  127. /// <summary>
  128. /// 该Field最后在屏幕上显示的坐标及大小
  129. /// </summary>
  130. public void SetShow_Rect(RectangleF value)
  131. { m_Rect = value; }
  132. public Bitmap OriginalImage { get => m_originalImage; set => m_originalImage = value; }
  133. //public void OnPaint(PaintEventArgs e)
  134. //{
  135. // //开始向下传递并进行绘制
  136. // foreach (DisplayParticle dp in m_list_dparticle)
  137. // {
  138. // if (dp.IsDeleted==false)
  139. // {
  140. // if (dp.GetPaintState() == PaintState.PAINT)
  141. // {
  142. // dp.OnPaint(e);
  143. // }
  144. // }
  145. // }
  146. //}
  147. }
  148. }