using OTSCommon.Model; using OTSIncAReportGraph.Class; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace OTSIncAReportGraph { public class DisplayField { Guid m_id; string m_fieldid; bool m_IsDragging; List m_list_dparticle; private float m_currentZoom=1; PointF m_ots_point; //按底层设计结构,底层返回的物理坐标位置及大小,OTS坐标大小 RectangleF m_Rect;//最后换算到在显示器上显示的坐标位置大小 PointF m_dragingpoint;//鼠标拖动的位置 private Bitmap m_originalImage; const int INVALIDPARTICLE= -1; /// /// 构造函数 /// public DisplayField(Field fld, int fldwidth, int fldheight,Point screenPos) { m_list_dparticle = new List(); m_id = System.Guid.NewGuid(); Point thisfield_point = new Point() { X = fld.FieldPosX, Y = fld.FieldPosY }; FieldID = fld.FieldID.ToString(); SetShow_Rect(new Rectangle(screenPos, new Size(fldwidth, fldheight))); OTSCoordinatePos = new PointF(thisfield_point.X, thisfield_point.Y); //先获取该Field中的所有Particle List list_particle; list_particle = fld.ParticleList; //然后将取出的数据,转换成Bitmap对象 m_originalImage = DrawFunction.ReadImageFile(fld.FieldImage); Bitmap dpImage = new Bitmap(fldwidth, fldheight); //再循环计算所有的Particle对象 foreach (Particle particle in list_particle) { //分布图排列图无效颗粒不显示 if (particle.TypeId == INVALIDPARTICLE) { continue; } //创建DParticle颗粒 DisplayParticle dp = new DisplayParticle(particle,screenPos,m_originalImage,dpImage); m_list_dparticle.Add(dp); } } public DisplayField(List in_list_dparticle) { m_list_dparticle = in_list_dparticle; } public void Zoom(float zoomDelta , PointF refPoint) { m_Rect.Width += m_Rect.Width/ m_currentZoom * zoomDelta; m_Rect.Height += m_Rect.Height/ m_currentZoom * zoomDelta; //锚点缩放补差值计算,得出差值 float xShiftOld = m_Rect.X - refPoint.X; float yShiftOld = m_Rect.Y - refPoint.Y; float xShift = m_Rect.X - refPoint.X + xShiftOld/ m_currentZoom * zoomDelta; float yShift = m_Rect.Y - refPoint.Y + yShiftOld/ m_currentZoom * zoomDelta; m_Rect.X = refPoint.X + xShift; m_Rect.Y = refPoint.Y + yShift; m_currentZoom += zoomDelta; } public void DraggingMove(PointF mousePoint) { m_Rect = new RectangleF( m_Rect.Left + Convert.ToSingle((mousePoint.X - DraggingPoint.X)), m_Rect.Top + Convert.ToSingle((mousePoint.Y - DraggingPoint.Y)), m_Rect.Width, m_Rect.Height); DraggingPoint = mousePoint; } public void Move(SizeF xyShift) { m_Rect = new RectangleF( m_Rect.Left- Convert.ToSingle((xyShift.Width)), m_Rect.Top - Convert.ToSingle((xyShift.Height)), m_Rect.Width, m_Rect.Height); } public Guid guid { get => m_id; set => m_id = value; } /// /// 是否被拖动标识 /// public bool IsDragging { get => m_IsDragging; set => m_IsDragging = value; } /// /// 被拖动到的位置坐标 /// public PointF DraggingPoint { get => m_dragingpoint; set => m_dragingpoint = value; } /// /// 与底层对应的ID,这里叫成FieldID /// public string FieldID { get { return m_fieldid; } set { m_fieldid = value; } } /// /// 包含的Particle列表 /// public List List_DParticle { get { return m_list_dparticle; } set { m_list_dparticle = value; } } /// /// 该Field的OTS坐标及大小 /// public PointF OTSCoordinatePos { get { return m_ots_point; } set { m_ots_point = value; } } /// /// 该Field最后在屏幕上显示的坐标及大小 /// public RectangleF GetShowRect() { return m_Rect; } /// /// 该Field最后在屏幕上显示的坐标及大小 /// public void SetShow_Rect(RectangleF value) { m_Rect = value; } public Bitmap OriginalImage { get => m_originalImage; set => m_originalImage = value; } //public void OnPaint(PaintEventArgs e) //{ // //开始向下传递并进行绘制 // foreach (DisplayParticle dp in m_list_dparticle) // { // if (dp.IsDeleted==false) // { // if (dp.GetPaintState() == PaintState.PAINT) // { // dp.OnPaint(e); // } // } // } //} } }