106 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Linq;
 | |
| using System.Text;
 | |
| using System.Threading.Tasks;
 | |
| using System.Drawing;
 | |
| 
 | |
| namespace Project.Class
 | |
| {
 | |
| 	public class KeyenceBarcodeData
 | |
| 	{
 | |
| 		public double Angle { get; set; }
 | |
| 		public StdLabelPrint.CAmkorSTDBarcode AmkorData { get; set; }
 | |
| 		public Point[] vertex { get; set; }
 | |
| 		public string Data { get; set; }
 | |
| 		public Point CenterPX { get; set; }
 | |
| 		public bool Ignore { get; set; }
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// 1:QR, 11:Code 128(like 1D)
 | |
| 		/// </summary>
 | |
| 		public string barcodeSymbol { get; set; }
 | |
|         public string barcodeSource { get; set; }    //230503
 | |
| 		public Boolean UserActive { get; set; }
 | |
| 		public Boolean isSTDBarcode
 | |
| 		{
 | |
| 			get
 | |
| 			{
 | |
| 				if (AmkorData != null && barcodeSymbol == "1" && AmkorData.isValid) return true;
 | |
| 				return false;
 | |
| 			}
 | |
| 		}
 | |
| 		public Boolean isNewLen15
 | |
| 		{
 | |
| 			get
 | |
| 			{
 | |
| 				if (AmkorData != null && barcodeSymbol == "1" && AmkorData.isValid && AmkorData.NewLen15Barcode) return true;
 | |
| 				return false;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// 라벨의 위치를 표시한다. 8방향이며 키패드 유사하게 설정한다 789/4-6/123
 | |
| 		/// </summary>
 | |
| 		public byte LabelPosition { get; set; }
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// regex check ok
 | |
| 		/// </summary>
 | |
| 		public Boolean RegExConfirm { get; set; }
 | |
| 		public Boolean RefExApply { get; set; }
 | |
| 
 | |
| 		public KeyenceBarcodeData()
 | |
| 		{
 | |
| 			LabelPosition = 0;
 | |
| 			Angle = 0.0;
 | |
| 			Data = string.Empty;
 | |
| 			CenterPX = Point.Empty;
 | |
| 			AmkorData = null;
 | |
| 			vertex = null;
 | |
| 			barcodeSymbol = string.Empty;
 | |
| 			UserActive = false;
 | |
| 			RegExConfirm = false;
 | |
| 			Ignore = false;
 | |
|             barcodeSource = string.Empty;
 | |
| 
 | |
|         }
 | |
| 
 | |
| 		public override string ToString()
 | |
| 		{
 | |
| 			return string.Format("{0},Deg={1},Center={2}x{3}", Data, Angle, CenterPX.X, CenterPX.Y);
 | |
| 		}
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// 해당 중심점이 겹치는지 확인합니다.
 | |
| 		/// </summary>
 | |
| 		/// <param name="Center"></param>
 | |
| 		/// <returns></returns>
 | |
| 		public Boolean CheckIntersect(Point Center, string data)
 | |
| 		{
 | |
| 			if (data == null) return false;
 | |
| 			if (data.Equals(this.Data) == false) return false; //자료가 다르면 다른 자료로 처리한다
 | |
| 			return getInside(Center, vertex);
 | |
| 		}
 | |
| 
 | |
| 		bool getInside(Point pt, Point[] ptArr)
 | |
| 		{
 | |
| 			int crosses = 0;
 | |
| 			for (int i = 0; i < ptArr.Length; i++)
 | |
| 			{
 | |
| 				int j = (i + 1) % ptArr.Length;
 | |
| 				if ((ptArr[i].Y > pt.Y) != (ptArr[j].Y > pt.Y))
 | |
| 				{
 | |
| 					//atX는 점 B를 지나는 수평선과 선분 (p[i], p[j])의 교점
 | |
| 					double atX = (ptArr[j].X - ptArr[i].X) * (pt.Y - ptArr[i].Y) / (ptArr[j].Y - ptArr[i].Y) + ptArr[i].X;
 | |
| 					//atX가 오른쪽 반직선과의 교점이 맞으면 교점의 개수를 증가시킨다.
 | |
| 					if (pt.X < atX)
 | |
| 						crosses++;
 | |
| 				}
 | |
| 			}
 | |
| 			return crosses % 2 > 0;
 | |
| 		}
 | |
| 
 | |
| 	}
 | |
| }
 | 
