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

87 lines
2.9 KiB
C#

using VisionCommon;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Media.Animation;
namespace VisionAligner {
/// <summary>
/// 얼라인 에이전트 매니저
/// </summary>
public class AlignAgentManager {
private static object _lock = new object();
private static Dictionary<AlignInfo, Aligner> _AlignAgents = new Dictionary<AlignInfo, Aligner>();
/// <summary>
/// 얼라인 에이전트를 Set한다
/// </summary>
/// <param name="alignInfo">얼라인 정보</param>
/// <param name="aligner">얼라인 계산</param>
/// <returns>성공 유무</returns>
public static void SetAlignAgent(AlignInfo alignInfo, Aligner aligner) {
lock (_lock) {
if (!_AlignAgents.ContainsKey(alignInfo)) {
_AlignAgents.Add(alignInfo, aligner);
}
else {
_AlignAgents[alignInfo] = aligner;
}
}
}
/// <summary>
/// 얼라인 에이전트를 Get한다
/// </summary>
/// <param name="alignInfo">얼라인 정보</param>
/// <returns>얼라인 에이전트</returns>
public static Aligner GetAlignAgent(AlignInfo alignInfo) {
lock (_lock) {
if (_AlignAgents.ContainsKey(alignInfo)) {
return _AlignAgents[alignInfo];
}
}
return null;
}
/// <summary>
/// 사용하지 않는 에이전트를 삭제한다
/// </summary>
/// <param name="newAlignInfos">최신 얼라인 정보들</param>
/// <returns>성공 유무</returns>
public static void DeleteUnusedAgent(List<AlignInfo> newAlignInfos) {
lock (_lock) {
foreach (AlignInfo oldAlignInfo in _AlignAgents.Keys.ToList()) {
if (!newAlignInfos.Contains(oldAlignInfo)) {
if (_AlignAgents.ContainsKey(oldAlignInfo)) {
_AlignAgents.Remove(oldAlignInfo);
}
}
}
}
}
/// <summary>
/// 새로 추가된 얼라인 정보인지 확인한다
/// </summary>
/// <param name="alignInfo">최신 얼라인 정보들</param>
/// <returns>추가된 얼라인 유무</returns>
public static bool IsNewAlignInfo(AlignInfo alignInfo) {
lock (_lock) {
if (!_AlignAgents.ContainsKey(alignInfo)) {
return true;
}
else {
return false;
}
}
}
/// <summary>
/// 얼라인 에이전트를 초기화한다.
/// </summary>
public static void Clear() {
lock (_lock) {
_AlignAgents.Clear();
}
}
}
}