2026-03-30 17:09:29 +09:00

98 lines
3.4 KiB
C#

using Aurora.Api;
using VisionCommon;
using System;
using System.Collections.Generic;
using Aurora.View;
namespace VisionAligner {
/// <summary>
/// 얼라인 에이전트
/// </summary>
public class AlignAgent : Aligner {
private Logger _Logger;
private AlignInfo _AlignInfo;
private AlignRecipe _AlignRecipe;
private AlignMode _AlignMode;
/// <summary>
/// 생성자
/// </summary>
/// <param name="alignInfo">얼라인 정보</param>
/// <param name="alignMode">얼라인 모드</param>
public AlignAgent(AlignInfo alignInfo, AlignMode alignMode) {
_Logger = new Logger($"AlignAgent[{alignInfo.AlignName}]");
_AlignInfo = alignInfo;
UpdateRecipe(alignMode);
}
/// <summary>
/// 외부에서 레시피가 새로 저장된 경우, 레시피를 갱신해준다.
/// </summary>
/// <param name="alignMode">얼라인 모드</param>
public override void UpdateRecipe(AlignMode alignMode) {
_AlignRecipe = VisionRecipeManager.GetAlignRecipe(_AlignInfo);
_AlignMode = alignMode;
}
/// <summary>
/// 얼라인 모드를 모두 리셋한다.
/// </summary>
public override void Clear() {
_AlignMode.ResetAll();
}
/// <summary>
/// N-포인트 얼라인 보정량 XYT를 계산한다.
/// </summary>
/// <param name="meaPoints">패턴 검출 위치</param>
/// <param name="refPoints">레퍼런스(기준) 위치</param>
/// <param name="flipY">좌표계의 Y축 반전 여부</param>
/// <returns>얼라인 결과</returns>
public override AlignResult Align(
List<DoublePoint> meaPoints,
List<DoublePoint> 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;
}
/// <summary>
/// 1-포인트 얼라인 보정량 XYT를 계산한다.
/// </summary>
/// <param name="meaPoint">패턴 검출 위치</param>
/// <param name="refPoint">레퍼런스(기준) 위치</param>
/// <param name="theta">얼라인 보정량 T</param>
/// <param name="flipY">좌표계의 Y축 반전 여부</param>
/// <returns>얼라인 결과</returns>
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;
}
}
}