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; } /// /// 1:QR, 11:Code 128(like 1D) /// 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; } } /// /// 라벨의 위치를 표시한다. 8방향이며 키패드 유사하게 설정한다 789/4-6/123 /// public byte LabelPosition { get; set; } /// /// 정규식 분석이 완료되었다면 True를 반환합니다 /// public Boolean RegExConfirm { get; set; } public int 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); } /// /// 해당 중심점이 겹치는지 확인합니다. /// /// /// 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; } } }