using Aurora.Api;
using VisionCommon;
using System;
using System.Collections.Generic;
using Aurora.View;
namespace VisionAligner {
///
/// 얼라인 에이전트
///
public class AlignAgent : Aligner {
private Logger _Logger;
private AlignInfo _AlignInfo;
private AlignRecipe _AlignRecipe;
private AlignMode _AlignMode;
///
/// 생성자
///
/// 얼라인 정보
/// 얼라인 모드
public AlignAgent(AlignInfo alignInfo, AlignMode alignMode) {
_Logger = new Logger($"AlignAgent[{alignInfo.AlignName}]");
_AlignInfo = alignInfo;
UpdateRecipe(alignMode);
}
///
/// 외부에서 레시피가 새로 저장된 경우, 레시피를 갱신해준다.
///
/// 얼라인 모드
public override void UpdateRecipe(AlignMode alignMode) {
_AlignRecipe = VisionRecipeManager.GetAlignRecipe(_AlignInfo);
_AlignMode = alignMode;
}
///
/// 얼라인 모드를 모두 리셋한다.
///
public override void Clear() {
_AlignMode.ResetAll();
}
///
/// N-포인트 얼라인 보정량 XYT를 계산한다.
///
/// 패턴 검출 위치
/// 레퍼런스(기준) 위치
/// 좌표계의 Y축 반전 여부
/// 얼라인 결과
public override AlignResult Align(
List meaPoints,
List refPoints,
int flipY) {
AlignResult alignResult = null;
try {
alignResult = _AlignMode.Align(meaPoints, refPoints, flipY);
}
catch (DllNotFoundException e) {
MessageUtil.ShowErrorToast("Failed to load VisionCore.dll");
_Logger.FuncE(e.Message);
}
catch (Exception e) {
_Logger.FuncE(e.Message);
}
return alignResult;
}
///
/// 1-포인트 얼라인 보정량 XYT를 계산한다.
///
/// 패턴 검출 위치
/// 레퍼런스(기준) 위치
/// 얼라인 보정량 T
/// 좌표계의 Y축 반전 여부
/// 얼라인 결과
public override AlignResult Align(
DoublePoint meaPoint,
DoublePoint refPoint,
Angle theta,
int flipY) {
AlignResult alignResult = null;
try {
// MIL은 반시계, 얼라인은 시계 방향이므로 여기서 부호 반대
alignResult = _AlignMode.Align(meaPoint, refPoint, -theta, flipY);
}
catch (DllNotFoundException e) {
MessageUtil.ShowErrorToast("Failed to load VisionCore.dll");
_Logger.FuncE(e.Message);
}
catch (Exception e) {
_Logger.FuncE(e.Message);
}
return alignResult;
}
}
}