/* * Copyright (c) 2025 LG Electronics Inc. * SPDX-License-Identifier: LicenseRef-LGE-Proprietary */ 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."); } } } }