/*
* Copyright (c) 2025 LG Electronics Inc.
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
*/
using Aurora;
using Aurora.Api;
using VisionCommon;
using System;
using System.Reflection;
namespace CogPattern {
///
/// Cognex 패턴 에이전트 생성 및 등록 관리
///
public class CogPatternAgentFactory {
private static Logger _logger = new Logger(typeof(CogPatternAgentFactory).Name);
private static IDisposable _EventDisposable;
///
/// 패턴 에이전트 생성 및 등록
///
public static void Register() {
try {
VersionChecker.Print(Assembly.GetExecutingAssembly().GetName());
SetObservable();
SetPatternAgentManager();
}
catch (Exception e) {
_logger.FuncE(e.Message);
}
}
private static void SetObservable() {
if (_EventDisposable == null) {
var observable = VisionEventId.GetRecipeUpdateObservable();
_EventDisposable = observable.Subscribe(_ => UpdatePatternAgentManager());
}
}
private static void SetPatternAgentManager() {
PatternAgentManager.Clear();
foreach (var unitId in VisionRecipeManager.GetUnitIds()) {
foreach (var subSysInfo in VisionRecipeManager.GetSubSysInfos(unitId)) {
foreach (var fovInfo in VisionRecipeManager.GetFovInfos(subSysInfo)) {
CreatePatternAgent(fovInfo);
}
}
}
}
private static void UpdatePatternAgentManager() {
// 삭제된 에이전트 제거
PatternAgentManager.DeleteUnusedAgent(VisionRecipeManager.GetFovInfos());
foreach (var newUnitId in VisionRecipeManager.GetUnitIds()) {
var newSubSysInfos = VisionRecipeManager.GetSubSysInfos(newUnitId);
foreach (var newSubSysInfo in newSubSysInfos) {
var newFovInfos = VisionRecipeManager.GetFovInfos(newSubSysInfo);
foreach (var newFovInfo in newFovInfos) {
// 새로 생성된 에이전트 추가
if (PatternAgentManager.IsNewSubSysInfo(newFovInfo)) {
CreatePatternAgent(newFovInfo);
}
}
}
}
}
private static void CreatePatternAgent(FovInfo fovInfo) {
var patternAgent = new CogPatternAgent(fovInfo);
PatternAgentManager.SetAgent(fovInfo, patternAgent);
}
}
}