/* * 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 { /// /// 얼라인 에이전트 /// 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; } } }