initial commit
This commit is contained in:
		
							
								
								
									
										205
									
								
								cVMS.NET_CS/HMI/MainDisplay/BarGraph.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										205
									
								
								cVMS.NET_CS/HMI/MainDisplay/BarGraph.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,205 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.ComponentModel; | ||||
| using System.Drawing; | ||||
| using System.Data; | ||||
| using System.Text; | ||||
| using System.Windows.Forms; | ||||
| using System.Drawing.Drawing2D; | ||||
|  | ||||
| namespace vmsnet.HMI | ||||
| {     | ||||
|         public partial class BarCtrl : UserControl | ||||
|         { | ||||
|             CGROUP NowGrp = null; | ||||
|             RectangleF BarRect = new RectangleF(0, 0, 0, 0); | ||||
|  | ||||
|             public Boolean Show_DebugMsg { get; set; } | ||||
|  | ||||
|             public BarCtrl() | ||||
|             { | ||||
|                 InitializeComponent(); | ||||
|  | ||||
|                 // Initialize Variables | ||||
|  | ||||
|                 // Set Optimized Double Buffer to reduce flickering | ||||
|                 this.SetStyle(ControlStyles.UserPaint, true); | ||||
|                 this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); | ||||
|                 this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); | ||||
|  | ||||
|                 // Redraw when resized | ||||
|                 this.SetStyle(ControlStyles.ResizeRedraw, true); | ||||
|                 this.Font = SystemInformation.MenuFont; | ||||
|                 Show_DebugMsg = false; | ||||
|             } | ||||
|  | ||||
|             public CGROUP Group | ||||
|             { | ||||
|                 set | ||||
|                 { | ||||
|                     NowGrp = value; | ||||
|                 } | ||||
|             } | ||||
|              | ||||
|             /// Override OnPaint method | ||||
|             protected override void OnPaint(PaintEventArgs e) | ||||
|             { | ||||
|                 base.OnPaint(e); | ||||
|                 this.SuspendLayout(); | ||||
|  | ||||
|                 // AntiAliasing | ||||
|                 e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; | ||||
|  | ||||
|                 if (bMakeBarRect) MakeBarRect(); | ||||
|  | ||||
|                 DrawBarGraph(e.Graphics); | ||||
|                 Draw_Debug(e.Graphics); | ||||
|               | ||||
|                 this.Update(); | ||||
|                 this.ResumeLayout(); | ||||
|             } | ||||
|  | ||||
|             public void Draw_Debug(Graphics g) | ||||
|             { | ||||
|                 if (!Show_DebugMsg) return; | ||||
|  | ||||
|                 //Single newy = 50; | ||||
|                 //String newstr = ""; | ||||
|                 SizeF fontsize; | ||||
|  | ||||
|                 StringBuilder DebugMsg = new StringBuilder(); | ||||
|  | ||||
|                  | ||||
|                 DebugMsg.AppendLine("GRP=" + this.NowGrp.ToString()); | ||||
|                  | ||||
|            | ||||
|                 // newstr = "CHinfo=" + chinfo.GetUpperBound(0); | ||||
|  | ||||
|                 foreach ( CITEM item in NowGrp.Items) | ||||
|                 { | ||||
|                     DebugMsg.AppendLine("item=" + item.ToString()); | ||||
|                 } | ||||
|  | ||||
|                 fontsize = g.MeasureString(DebugMsg.ToString(), this.Font); | ||||
|                 g.FillRectangle(new SolidBrush(Color.FromArgb(150, Color.Black)), new Rectangle(0, 0, (int)(fontsize.Width * 1.3), (int)(fontsize.Height * 1.3))); | ||||
|                 g.DrawString(DebugMsg.ToString(), this.Font, Brushes.Tomato, 10, 10); | ||||
|             } | ||||
|  | ||||
|             protected override void OnSizeChanged(EventArgs e) | ||||
|             {    | ||||
|                 base.OnSizeChanged(e); | ||||
|                 BarRect = new RectangleF(DisplayRectangle.Left + Padding.Left, DisplayRectangle.Top + Padding.Top, DisplayRectangle.Width - Padding.Left - Padding.Right, DisplayRectangle.Height - Padding.Top - Padding.Bottom); | ||||
|             } | ||||
|  | ||||
|             public Boolean bMakeBarRect = true; | ||||
|             private void MakeBarRect() | ||||
|             { | ||||
|                 if (BarRect.Width == 0) return; | ||||
|                 if (!bMakeBarRect) return; | ||||
|                 if (NowGrp == null) return; | ||||
|                 if (NowGrp.Items == null) return; | ||||
|  | ||||
|  | ||||
|                 //각아이템의 2pixel 만큼 떨어져있다. | ||||
|                 int ItemWidth = (int)(Math.Floor((this.BarRect.Width - ((NowGrp.NullBalanceSeq - 1) * 1)) / NowGrp.NullBalanceSeq)); | ||||
|                 if (ItemWidth < 2) ItemWidth = 2;  //너무작은건 어절수없음 | ||||
|                 int ItemHeight = (int)(Math.Floor((BarRect.Height - 20 - 10) / 2)); | ||||
|  | ||||
|                 int totalWidth = ItemWidth * NowGrp.NullBalanceSeq + ItemWidth;  //1개를 더 추가한다. | ||||
|                 Single CenterMarginX = (BarRect.Width - totalWidth) / 2; | ||||
|  | ||||
|                 //차트내의 아이템의 표시영역을 결정 | ||||
|                 //UInt16 itemindex = 0; | ||||
|                 foreach (CITEM item in NowGrp.Items) | ||||
|                 { | ||||
|                     //Single Term = 0;//= item.idx == 0 ? 0 : item.idx * 2; | ||||
|                     Single X = 0;//(item.idx * ItemWidth) + Term; | ||||
|                     Single y = 0;//ChartRect.Top; | ||||
|  | ||||
|                     if (item.seq <= NowGrp.NullBalanceSeq) | ||||
|                     { | ||||
|                         //상위그룹     | ||||
|                        // Term = item.seq == 1 ? 0 : (item.seq) * 2; | ||||
|                         X = (item.seq  * ItemWidth) ;//+ Term; | ||||
|                         y = 20; | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         //하위그룹 | ||||
|                       //  Term = item.seq == NowGrp.NullBalanceSeq ? 0 : (item.seq - (NowGrp.NullBalanceSeq + 1)) * 2; | ||||
|                         X = (item.seq - NowGrp.NullBalanceSeq -1) * ItemWidth;//+ Term; | ||||
|                         y = ItemHeight + 20; | ||||
|                     } | ||||
|                     item.BarRect = new RectangleF(BarRect.Left + X + CenterMarginX, BarRect.Top + y, ItemWidth, ItemHeight - 10); | ||||
|                    // itemindex += 1; | ||||
|                 } | ||||
|                 bMakeBarRect = false; | ||||
|             } | ||||
|  | ||||
|             private void DrawBarGraph(Graphics g) | ||||
|             { | ||||
|                 if (BarRect.Width < 1) return; | ||||
|                 if (bMakeBarRect) MakeBarRect();//영역을 새로 생성해야한다면 만듬 | ||||
|                 if (NowGrp == null) return; | ||||
|                 if (NowGrp.Items == null) return; | ||||
|  | ||||
|  | ||||
|                 int YMax = 4; | ||||
|                 int YMin = 0; | ||||
|                  | ||||
|  | ||||
|                 ///현재등록된 아이템을 화면에 표시한다. | ||||
|                 foreach (CITEM item in NowGrp.Items) | ||||
|                 { | ||||
|                     //값에따른 색상입히기 | ||||
|                     Color BarColor = Color.Green; | ||||
|                     if (item.ismin) BarColor = Color.DeepSkyBlue; | ||||
|                     else if (item.ismax) BarColor = Color.Tomato; | ||||
|                     else if (item.onalamh ) BarColor = Color.Red; | ||||
|                     else if (item.onalaml) BarColor = Color.Blue;   | ||||
|  | ||||
|                     Single Percent = (100 * item.CurValue) / (YMax - YMin); | ||||
|  | ||||
|                     //값에따른 높이값 | ||||
|                     Single ValueHeight = item.BarRect.Height * (Percent / 100); | ||||
|                     if (ValueHeight > 1) | ||||
|                     { | ||||
|                         Single ValueY = item.BarRect.Top + (item.BarRect.Height - ValueHeight); | ||||
|  | ||||
|                         //색상으로 칠한다. | ||||
|                         g.FillRectangle(new SolidBrush(BarColor), item.BarRect.Left, ValueY, item.BarRect.Width, ValueHeight); | ||||
|  | ||||
|                     } | ||||
|  | ||||
|                     //테두리표시 | ||||
|                     if (item.사용 ) | ||||
|                     { | ||||
|                         g.DrawRectangle(Pens.Black, item.BarRect.Left, item.BarRect.Top, item.BarRect.Width, item.BarRect.Height); | ||||
|                     } | ||||
|                     //g.DrawString(item.idx.ToString("000"), new Font("Arial", 7), Brushes.Black, item.BarRect.Left, item.BarRect.Bottom); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             protected override void OnResize(EventArgs e) | ||||
|             { | ||||
|                 base.OnResize(e); | ||||
|                 bMakeBarRect = true; | ||||
|                 Invalidate();                 | ||||
|             } | ||||
|  | ||||
|              | ||||
|             private void InitializeComponent() | ||||
|             { | ||||
|                 this.SuspendLayout(); | ||||
|                 //  | ||||
|                 // DispCtrl | ||||
|                 //  | ||||
|                 this.Name = "BarCtrl"; | ||||
|                 this.Size = new System.Drawing.Size(287, 321);                 | ||||
|                 this.ResumeLayout(false); | ||||
|             } | ||||
|  | ||||
|  | ||||
|         }       //end class | ||||
|  | ||||
| }   //end namespace | ||||
		Reference in New Issue
	
	Block a user
	 Arin(asus)
					Arin(asus)