using Aurora;
using Aurora.Api;
using VisionCommon;
using System;
using System.Collections.Generic;
using Aurora.Api.Devices;
namespace VisionSequence.Aligner {
///
/// 모든 얼라인 시퀀스들을 사전에 등록하여 사용한다.
///
public class AlignProcSeqManager {
private static Logger _Logger = new Logger("AlignProcSeqManager");
///
/// 얼라인 공정 시퀀스를 생성하고 등록한다.
///
/// Aurora 환경 변수
/// Aurora의 SequenceRegister
public static void RegisterSeq(IAuroraEnvironment auroraEnv, SequenceRegister register) {
try {
bool isUsed_PN_AN = false;
foreach (var alignInfo in VisionRecipeManager.GetAlignInfos()) {
var alignRecipe = VisionRecipeManager.GetAlignRecipe(alignInfo);
SequenceBuilder seqBuilder = GetSeqBuilder(alignInfo);
if (seqBuilder != null) {
var seqName = GetSeqName(alignInfo);
register(seqName, seqBuilder);
}
var procFovType = alignRecipe.ProcParams.ProcFovType;
if ((procFovType == eProcFovType.C1_F1_AP2_A2 || procFovType == eProcFovType.C1_F1_SPN_AN) && !isUsed_PN_AN) {
isUsed_PN_AN = true;
}
}
if (isUsed_PN_AN) {
register(VisionKeys.AlignProcSeqKey_PN_AN, new AlignProcSeq_PN_AN().Builder(VisionKeys.AlignProcSeqKey_PN_AN));
}
}
catch (Exception e) {
_Logger.FuncE(e.Message);
}
}
///
/// 시퀀스빌더를 얻어온다.
///
/// 얼라인 키 정보
/// 시퀀스빌더
public static SequenceBuilder GetSeqBuilder(AlignInfo alignInfo) {
try {
var seqName = GetSeqName(alignInfo);
SubSeqBase procSeq = new AlignProcSeq(seqName, alignInfo);
return procSeq.Builder(seqName);
}
catch (Exception e) {
_Logger.FuncE(e.Message);
}
return null;
}
///
/// 얼라인 시퀀스를 얻어온다.
///
/// 얼라인 키 정보
/// 시퀀스
public static ISequence GetSeq(AlignInfo alignInfo) {
var seqName = GetSeqName(alignInfo);
return VisionEnv.AuroraEnv.SequenceEntry[seqName];
}
///
/// 얼라인 시퀀스 파라미터를 얻어온다.
///
/// 얼라인 키 정보
/// FOV별로 이동시킬 절대위치. null일 경우, 자동으로 Adapter에 정의된 티칭위치로 이동
/// 얼라인 공정 시퀀스 파라미터
public static AlignProcSeqParams GetAlignProcSeqParams(
AlignInfo alignInfo,
Dictionary fovPositions = null,
eDisplayType displayType = eDisplayType.Main_1) {
return new AlignProcSeqParams(alignInfo, fovPositions, displayType);
}
///
/// 시퀀스 이름을 얻어온다.
///
/// 얼라인 키 정보
/// 시퀀스 이름
public static string GetSeqName(AlignInfo alignInfo) {
return VisionKeys.AlignProcSeqKey + "_" + alignInfo.GetKey();
}
}
}