102 lines
3.5 KiB
C#
102 lines
3.5 KiB
C#
/*
|
|
* Copyright (c) 2025 LG Electronics Inc.
|
|
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
|
|
*/
|
|
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;
|
|
}
|
|
}
|
|
} |