using Aurora.Api;
using Aurora.Api.Control;
using VisionLight;
namespace VisionCommon {
///
/// 플라잉 리소스를 초기화하고, 이미지 및 얼라인 데이터를 인덱스별로 관리
///
public class FlyingManager {
private static Logger _Logger = new Logger(typeof(FlyingManager).Name);
private static readonly object _Lock = new object();
///
/// 플라잉 시작
///
/// FOV 정보
/// 얼라인 정보(조명 Set용)
/// 추가 파라미터
/// 성공 유무
public static int StartFlying(FovInfo fovInfo, AlignInfo alignInfo, object param = null) {
SetLight(fovInfo, alignInfo);
var camAgent = CameraAgentManager.GetCameraAgent(fovInfo);
if (camAgent.IsLiveRunning()) {
camAgent.StopLive();
}
return camAgent.StartFlying(fovInfo, param);
}
///
/// 플라잉 종료
///
/// FOV 정보
/// 추가 파라미터
/// 성공 유무
public static int StopFlying(FovInfo fovInfo, object param = null) {
var camAgent = CameraAgentManager.GetCameraAgent(fovInfo);
return camAgent.StopFlying(param);
}
///
/// 플라잉 상태 체크
///
/// FOV정보
/// 성공 유무
public static bool IsFlyingRunning(FovInfo fovInfo) {
var camAgent = CameraAgentManager.GetCameraAgent(fovInfo);
return camAgent.IsFlyingRunning();
}
///
/// 현재 플라잉 인덱스 가져오기
///
/// 현재 플라잉 인덱스
public static int GetCurrentFlyingIdx(FovInfo fovInfo) {
var camAgent = CameraAgentManager.GetCameraAgent(fovInfo);
return camAgent.GetCurrentFlyingIdx();
}
///
/// 플라잉 이미지 가져오기
///
/// FOV 정보
/// 플라잉 인덱스
/// 플라잉 이미지
public static object GetFlyingImage(FovInfo fovInfo, int flyingIdx) {
var camAgent = CameraAgentManager.GetCameraAgent(fovInfo);
return camAgent.GetFlyingImage(flyingIdx);
}
///
/// 플라잉 이미지 전체 가져오기
///
/// FOV 정보
/// 플라잉 이미지 전체
public static object[] GetFlyingImages(FovInfo fovInfo) {
var camAgent = CameraAgentManager.GetCameraAgent(fovInfo);
return camAgent.GetFlyingImages();
}
///
/// 플라잉 합성(원장) 이미지 가져오기. *원장 : Child 이미지를 조합하여 한 장으로 만듬
///
/// 플아잉 합성(원장) 이미지
public static object GetParentImage(FovInfo fovInfo) {
var camAgent = CameraAgentManager.GetCameraAgent(fovInfo);
return camAgent.GetParentImage();
}
///
/// 플라잉 조명 설정
///
/// FOV 정보
/// 얼라인 정보
private static void SetLight(FovInfo fovInfo, AlignInfo alignInfo) {
var procPatternInfo = VisionRecipeManager.GetProcPatternInfo(fovInfo, alignInfo.AlignId.ToString(), eProcPatternId.ProcPattern1);
var patternInfo = VisionRecipeManager.GetPatternInfo(fovInfo, procPatternInfo, alignInfo);
int chCnt = patternInfo?.LightInfo.LightParams.Count ?? 0;
if (chCnt == 0) {
_Logger.FuncE("The count of PatternInfo.LightInfo.LightParams is zero.");
return;
}
eLightResult res = LightHub.Instance.SetLevels(patternInfo.LightInfo.LightParams);
if (res == eLightResult.NG) {
_Logger.FuncE("Failed to set light levels.");
}
}
}
}