Initial commit
This commit is contained in:
		
							
								
								
									
										95
									
								
								Handler/CapCleaningControl/Loader/Draw_PickerPrinter.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								Handler/CapCleaningControl/Loader/Draw_PickerPrinter.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,95 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.ComponentModel; | ||||
| using System.Data; | ||||
| using System.Drawing; | ||||
| using System.Drawing.Drawing2D; | ||||
| using System.Linq; | ||||
| using System.Windows.Forms; | ||||
|  | ||||
|  | ||||
| namespace UIControl | ||||
| { | ||||
|     public partial class HMI | ||||
|     { | ||||
|         void Draw_PickerPrinter(Graphics g, RectangleF rect, | ||||
|             int motAxisY, int motAxisZ, bool reverse, | ||||
|             Boolean LockY, Boolean LockZ, Boolean ItemOn, Boolean ItemPickOK, | ||||
|             Boolean CylFW, Boolean CylBW) | ||||
|         { | ||||
|             //실제 로봇의 길이를 입력한다 (단위:mm) | ||||
|             var RealLenY = 400; | ||||
|             var RealLenZ = 250; | ||||
|  | ||||
|             g.FillRectangle(Brushes.DimGray, rect); | ||||
|             if (LockY) g.DrawRect(rect, Color.Blue, 5); | ||||
|             else g.DrawRect(rect, Color.White); | ||||
|  | ||||
|             var PXName = motAxisY == 2 ? arMotPosNameLM : arMotPosNameRM; | ||||
|             g.DrawString(PXName, this.arFont_MotPosName, Brushes.Black, rect, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center, FormatFlags = StringFormatFlags.DirectionVertical }); | ||||
|  | ||||
|             var RPosY = this.arMotorPosition[motAxisY]; | ||||
|             var RPosZ = this.arMotorPosition[motAxisZ]; | ||||
|             //RPosY = 0; | ||||
|             //RPosZ = 300; | ||||
|  | ||||
|             //모터의 실제 위치에 뭉치를 그린다. | ||||
|  | ||||
|             var PosY = (float)(rect.Top + (rect.Height - (rect.Height * RPosY / RealLenY))); | ||||
|  | ||||
|             //Y뭉치를 그린다 | ||||
|             var rectYP = new RectangleF(rect.X - 1, PosY - (rect.Width / 2.0f), rect.Width + 2, rect.Width); | ||||
|             g.FillRectangle(Brushes.Yellow, rectYP); | ||||
|             g.DrawRect(rectYP, Color.Black, 2); | ||||
|             //g.DrawLine(Pens.Red, rect.X - 30, PosY, rect.Right + 130, PosY); | ||||
|  | ||||
|  | ||||
|             //Z축을 그린다. | ||||
|             RectangleF rectZ = RectangleF.Empty; | ||||
|             var zwidth = 60; | ||||
|             if (reverse) rectZ = new RectangleF(rect.X - zwidth, PosY - 10, zwidth, 20); | ||||
|             else rectZ = new RectangleF(rect.Right, PosY - 10, zwidth, 20); | ||||
|  | ||||
|             float PosZ = 0f; | ||||
|             if (reverse) PosZ = (float)(rectZ.Left + rectZ.Width - (rectZ.Width * RPosZ / RealLenZ)); | ||||
|             else PosZ = (float)(rectZ.Left + rectZ.Width * RPosZ / RealLenZ); | ||||
|  | ||||
|             g.FillRectangle(Brushes.DimGray, rectZ); | ||||
|             if (LockZ) g.DrawRect(rectZ, Color.Blue, 5); | ||||
|             else g.DrawRect(rectZ, Color.White); | ||||
|  | ||||
|             //z축 포지션 이름 | ||||
|             var ZposName = motAxisZ == 3 ? arMotPosNameLZ : arMotPosNameRZ; | ||||
|             g.DrawString(ZposName, this.arFont_MotPosName, Brushes.Black, rectZ, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }); | ||||
|  | ||||
|             //var CylStr = string.Format("FW:{0},BW:{1}", CylFW, CylBW); | ||||
|             //if (CylFW == true && CylFW != CylBW) CylStr = "FW"; | ||||
|             //else if (CylBW == true && CylFW != CylBW) CylStr = "BW"; | ||||
|             //g.DrawString(CylStr, this.arFont_MotPosName, Brushes.Red, rectZ.Left, rectZ.Top - 20); | ||||
|  | ||||
|             //Z뭉치를 그린다 | ||||
|             var rectZP = new RectangleF(PosZ - (rectZ.Height / 2.0f), rectZ.Y - 1, rectZ.Height, rectZ.Height + 2); | ||||
|             if (ItemOn) | ||||
|             { | ||||
|                 g.FillRectangle(Brushes.Lime, rectZP); | ||||
|                 g.DrawRect(rectZP, Color.Black, 2); | ||||
|  | ||||
|  | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 g.FillRectangle(Brushes.SkyBlue, rectZP); | ||||
|                 g.DrawRect(rectZP, Color.Black, 2); | ||||
|             } | ||||
|             using (Font f = new Font("Consolas", 10, FontStyle.Bold)) | ||||
|                 g.DrawString((ItemPickOK ? "O" : "X"), f, Brushes.Black, rectZP, new StringFormat | ||||
|                 { | ||||
|                     Alignment = StringAlignment.Center, | ||||
|                     LineAlignment = StringAlignment.Center | ||||
|                 }); | ||||
|  | ||||
|             //g.DrawLine(Pens.Blue, PosZ, rectZ.Top - 30, PosZ, rectZ.Bottom + 100); | ||||
|  | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										237
									
								
								Handler/CapCleaningControl/Loader/Draw_PickerY.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										237
									
								
								Handler/CapCleaningControl/Loader/Draw_PickerY.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,237 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.ComponentModel; | ||||
| using System.Data; | ||||
| using System.Drawing; | ||||
| using System.Drawing.Drawing2D; | ||||
| using System.Linq; | ||||
| using System.Windows.Forms; | ||||
|  | ||||
|  | ||||
| namespace UIControl | ||||
| { | ||||
|     public partial class HMI | ||||
|     { | ||||
|         void Draw_PickerY(Graphics g, RectangleF rect) | ||||
|         { | ||||
|  | ||||
|             //return; | ||||
|  | ||||
|             //전체영역의 80% 영역에 Y-로봇의 축을 그린다. | ||||
|             //var motorMax = 400; //전체 가동 길이 400mm | ||||
|             var cx = rect_main.Left + rect_main.Width / 2.0f; | ||||
|             var cy = rect_main.Top + rect_main.Height * 0.2f;// / 2.0f - 200; | ||||
|  | ||||
|  | ||||
|             //모터길이가 설정되지않았따면 600으로 설정한다 | ||||
|             if (this.arMotorLengthY == 0) this.arMotorLengthY = 600; | ||||
|             var motYPosX = rect.Left + (rect.Width * ((arMotorPosition[0] + 1) / (this.arMotorLengthY * 1.0f))); | ||||
|  | ||||
|  | ||||
|  | ||||
|             //g.DrawString(arMotorPositionYP.ToString() + "/" + motYPosX.ToString(), this.Font, Brushes.Red, 100, 100); | ||||
|  | ||||
|             //Y축 모터의 현재위치를 표시한다 | ||||
|             g.DrawLine(new Pen(Color.SteelBlue, 10), (float)motYPosX, rect.Top, (float)motYPosX, rect.Bottom); | ||||
|  | ||||
|             g.DrawLine(new Pen(Color.Black, 1), (float)motYPosX, rect.Top - 5, (float)motYPosX, rect.Bottom + 5); | ||||
|  | ||||
|             //Y축 모터의 영역을 표시한다. | ||||
|             //            g.DrawRect(rect_picker, Color.White, 3); | ||||
|  | ||||
|             if(arPickerSafeZone) g.FillRectangle(Brushes.Lime, rect_picker); | ||||
|             else g.FillRectangle(Brushes.DimGray, rect_picker); | ||||
|             g.DrawString(arMotPosNamePX, arFont_MotPosName, Brushes.Gray, rect_picker, new StringFormat | ||||
|             { | ||||
|                 Alignment = StringAlignment.Near, | ||||
|                 LineAlignment = StringAlignment.Center | ||||
|             }); | ||||
|             if (arMotILockPKX) g.DrawRect(rect_picker, Color.Blue, 5); | ||||
|             else g.DrawRect(rect_picker, Color.FromArgb(50, 50, 50), 3); | ||||
|  | ||||
|             //중앙에 Safty Zone 글자 표시함 | ||||
|             if(arPickerSafeZone) | ||||
|             { | ||||
|                 g.DrawString("PICKER X - SAFETY ZONE", new Font("Consolas",12, FontStyle.Bold), Brushes.Black, rect_picker, new StringFormat | ||||
|                 { | ||||
|                     Alignment = StringAlignment.Center, | ||||
|                     LineAlignment = StringAlignment.Center | ||||
|                 }); | ||||
|             } | ||||
|  | ||||
|  | ||||
|             //Z축 모터의 영역 계산      | ||||
|             var motZLPosX = motYPosX; | ||||
|             //   var motZRPosX = motYPosX + CvtMMtoPX_W(motZSpaceMM / 2, 0); | ||||
|             var motZPosY = rect.Top - CvtMMtoPX_H(50, 0); //Y축하단에서 50mm 아래에 Z축을 표시한다. | ||||
|             var motZHMm = 300; | ||||
|             var motZhPx = CvtMMtoPX_H(motZHMm, 0); // | ||||
|             var motZwPx = rect.Height; | ||||
|             rect_zlaxis = new RectangleF((float)(motZLPosX - motZwPx / 2.0), (float)motZPosY, motZwPx, (float)motZhPx); | ||||
|             //  rect_zraxis = new RectangleF((float)(motZRPosX - motZwPx / 2.0), (float)motZPosY, motZwPx, (float)motZhPx); | ||||
|  | ||||
|             //현재위치를 표시하는 영역생성 | ||||
|             var zlSize = g.MeasureString("UNKNOWN", this.Font); | ||||
|             var zrSize = g.MeasureString("UNKNOWN", this.Font); | ||||
|             var zSizeW = Math.Max(zlSize.Width, zrSize.Width); | ||||
|             var zSizeH = Math.Max(zlSize.Height, zrSize.Height); | ||||
|             var rect_zlposname = new RectangleF( | ||||
|                 rect_zlaxis.Left + (rect_zlaxis.Width - zSizeW) / 2.0f, | ||||
|                 rect_zlaxis.Top - zSizeH + 5, | ||||
|                 zSizeW, | ||||
|                 zSizeH); | ||||
|  | ||||
|  | ||||
|             g.FillRectangle(Brushes.DimGray, rect_zlaxis); | ||||
|  | ||||
|  | ||||
|             //테두리 | ||||
|             if (arMotILockPKZ == true) g.DrawRect(rect_zlaxis, Color.Blue, 5); | ||||
|             else g.DrawRect(rect_zlaxis, Color.DimGray, 3); | ||||
|  | ||||
|  | ||||
|  | ||||
|             g.FillRectangle(Brushes.DimGray, rect_zlposname); | ||||
|  | ||||
|             if (arMotILockPKZ == true) g.DrawRect(rect_zlposname, Color.Blue, 5); | ||||
|             else g.DrawRect(rect_zlposname, Color.DimGray, 3); | ||||
|  | ||||
|  | ||||
|             //피커Z축위치 표시 | ||||
|             g.DrawString(arMotPosNamePZ, arFont_MotPosName, Brushes.Gray, rect_zlposname, new StringFormat | ||||
|             { | ||||
|                 Alignment = StringAlignment.Center, | ||||
|                 LineAlignment = StringAlignment.Center | ||||
|             }); | ||||
|  | ||||
|  | ||||
|             //중심점 센서 확인 | ||||
|             g.DrawLine(new Pen(Color.Black, 1), (float)motZLPosX, rect.Top - 5, (float)motZLPosX, rect.Bottom + 5); | ||||
|  | ||||
|             //Z축 모터위치와 길이확인 | ||||
|             if (this.arMotorLengthZL == 0) this.arMotorLengthZL = 600; | ||||
|             var motZLosY = rect_zlaxis.Top + (rect_zlaxis.Height * ((arMotorPosition[1] + 1) / (this.arMotorLengthZL * 1.0f))); | ||||
|  | ||||
|             //상(Rear), 하(Front)로 영역을 그린다 | ||||
|             var port_width = rect_picker_left.Width;// * 3f; | ||||
|             var port_height = rect_picker_left.Height; // rect.Height * 0.2f; | ||||
|  | ||||
|             //New Front Position | ||||
|             var newYF = (float)(motZLPosX - port_width / 2.0); | ||||
|             if (newYF != rect_picker_left.X) | ||||
|             { | ||||
|                 var offset = newYF - rect_picker_left.X; | ||||
|                 this.rect_picker_left.Offset(offset, 0);  //좌표가 변경되었다면 재계산 | ||||
|                 this.rect_picker_front_vac1.Offset(offset, 0); | ||||
|                 this.rect_picker_front_vac2.Offset(offset, 0); | ||||
|                 this.rect_picker_front_vac3.Offset(offset, 0); | ||||
|                 this.rect_picker_front_vac4.Offset(offset, 0); | ||||
|             } | ||||
|             if (motZLosY != rect_picker_left.Y) | ||||
|             { | ||||
|                 var offset = (float)(motZLosY - rect_picker_left.Y); | ||||
|                 this.rect_picker_left.Offset(0, offset);  //좌표가 변경되었다면 재계산 | ||||
|                 this.rect_picker_front_vac1.Offset(0, offset); | ||||
|                 this.rect_picker_front_vac2.Offset(0, offset); | ||||
|                 this.rect_picker_front_vac3.Offset(0, offset); | ||||
|                 this.rect_picker_front_vac4.Offset(0, offset); | ||||
|             } | ||||
|  | ||||
|             //피커 #1 Circle 색상  | ||||
|             var Bg1 = Color.FromArgb(100, 100, 100); | ||||
|             var Bg2 = Color.FromArgb(160, 160, 160); | ||||
|             if (this.arVar_Picker[0].Overload) | ||||
|             { | ||||
|                 Bg1 = Color.Tomato; | ||||
|                 Bg2 = Color.Red; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 if (this.arVar_Picker[0].ItemOn) | ||||
|                 { | ||||
|  | ||||
|                     //if (this.arVar_Picker[0].isReelDetect) | ||||
|                     //{ | ||||
|                         Bg1 = Color.Lime; //.FromArgb(100, 100, 100); | ||||
|                         Bg2 = Color.Green;//.FromArgb(160, 160, 160); | ||||
|                     //} | ||||
|                     //else | ||||
|                     //{ | ||||
|                     //    Bg1 = Color.Magenta; //.FromArgb(100, 100, 100); | ||||
|                     //    Bg2 = Color.DarkMagenta;//.FromArgb(160, 160, 160); | ||||
|                     //} | ||||
|  | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     Bg1 = Color.FromArgb(100, 100, 100); | ||||
|                     Bg2 = Color.FromArgb(160, 160, 160); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|  | ||||
|             using (var br = new LinearGradientBrush(rect_picker_left, Bg1, Bg2, LinearGradientMode.Vertical)) | ||||
|             { | ||||
|                 g.FillEllipse(br, rect_picker_left); | ||||
|             } | ||||
|  | ||||
|             //피커 #2 Circle 색상  | ||||
|             if (this.arVar_Picker[1].Overload) | ||||
|             { | ||||
|                 Bg1 = Color.Tomato; | ||||
|                 Bg2 = Color.Red; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 if (this.arVar_Picker[1].ItemOn) | ||||
|                 { | ||||
|                     //실제 아이템 체크 | ||||
|  | ||||
|                     if (this.arVar_Picker[1].isReelDetect) | ||||
|                     { | ||||
|                         Bg1 = Color.Lime; //.FromArgb(100, 100, 100); | ||||
|                         Bg2 = Color.Green;//.FromArgb(160, 160, 160); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         Bg1 = Color.Magenta; //.FromArgb(100, 100, 100); | ||||
|                         Bg2 = Color.DarkMagenta;//.FromArgb(160, 160, 160); | ||||
|                     } | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     Bg1 = Color.FromArgb(100, 100, 100); | ||||
|                     Bg2 = Color.FromArgb(160, 160, 160); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|  | ||||
|             //피커 테두리 | ||||
|             using (var bgPen = new Pen(Color.Black, 3)) | ||||
|             { | ||||
|                 var posT = arMotorPosition[6]; | ||||
|                 g.DrawEllipse(bgPen, rect_picker_left); | ||||
|                 g.DrawString(posT.ToString("N0"), this.Font, Brushes.Black, rect_picker_left,new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }); | ||||
|             } | ||||
|  | ||||
|             //피커 내부의 진공 표현 | ||||
|             g.FillEllipse((this.arVar_Picker[0].VacOutput[0] ? brVacOn : brVacOff), rect_picker_front_vac1); | ||||
|             g.FillEllipse((this.arVar_Picker[0].VacOutput[1] ? brVacOn : brVacOff), rect_picker_front_vac2); | ||||
|             g.FillEllipse((this.arVar_Picker[0].VacOutput[2] ? brVacOn : brVacOff), rect_picker_front_vac3); | ||||
|             g.FillEllipse((this.arVar_Picker[0].VacOutput[3] ? brVacOn : brVacOff), rect_picker_front_vac4); | ||||
|  | ||||
|             //피커설명 표시 | ||||
|             if (arVar_Picker[0].Overload) | ||||
|                 g.DrawString("OVL", arFont_picker, Brushes.Black, rect_picker_left, sfCenter); | ||||
|             else | ||||
|                 g.DrawString(this.arVar_Picker[0].PortPos, arFont_picker, Brushes.Black, rect_picker_left, sfCenter); | ||||
|  | ||||
|             //피커 진공표시 테두리 (진공출력상태에 따라서 색상을 달리 함) | ||||
|             g.DrawEllipse((this.arVar_Picker[0].VacOutput[0] ? penVacOn : penVacOff), rect_picker_front_vac1); | ||||
|             g.DrawEllipse((this.arVar_Picker[0].VacOutput[1] ? penVacOn : penVacOff), rect_picker_front_vac2); | ||||
|             g.DrawEllipse((this.arVar_Picker[0].VacOutput[2] ? penVacOn : penVacOff), rect_picker_front_vac3); | ||||
|             g.DrawEllipse((this.arVar_Picker[0].VacOutput[3] ? penVacOn : penVacOff), rect_picker_front_vac4); | ||||
|  | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 ChiKyun Kim
					ChiKyun Kim