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>
|
|
/// 정규식 분석이 완료되었다면 True를 반환합니다
|
|
/// </summary>
|
|
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);
|
|
}
|
|
|
|
/// <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;
|
|
}
|
|
|
|
}
|
|
}
|