2026-01-26 18:56:53 +09:00

114 lines
4.5 KiB
C#

/*
* Copyright (c) 2025 LG Electronics Inc.
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
*/
using Aurora.Api;
using Aurora.Api.Control;
using VisionLight;
namespace VisionCommon {
/// <summary>
/// 플라잉 리소스를 초기화하고, 이미지 및 얼라인 데이터를 인덱스별로 관리
/// </summary>
public class FlyingManager {
private static Logger _Logger = new Logger(typeof(FlyingManager).Name);
private static readonly object _Lock = new object();
/// <summary>
/// 플라잉 시작
/// </summary>
/// <param name="fovInfo">FOV 정보</param>
/// <param name="alignInfo">얼라인 정보(조명 Set용)</param>
/// <param name="param">추가 파라미터</param>
/// <returns>성공 유무</returns>
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);
}
/// <summary>
/// 플라잉 종료
/// </summary>
/// <param name="fovInfo">FOV 정보</param>
/// <param name="param">추가 파라미터</param>
/// <returns>성공 유무</returns>
public static int StopFlying(FovInfo fovInfo, object param = null) {
var camAgent = CameraAgentManager.GetCameraAgent(fovInfo);
return camAgent.StopFlying(param);
}
/// <summary>
/// 플라잉 상태 체크
/// </summary>
/// <param name="fovInfo">FOV정보</param>
/// <returns>성공 유무</returns>
public static bool IsFlyingRunning(FovInfo fovInfo) {
var camAgent = CameraAgentManager.GetCameraAgent(fovInfo);
return camAgent.IsFlyingRunning();
}
/// <summary>
/// 현재 플라잉 인덱스 가져오기
/// </summary>
/// <returns>현재 플라잉 인덱스</returns>
public static int GetCurrentFlyingIdx(FovInfo fovInfo) {
var camAgent = CameraAgentManager.GetCameraAgent(fovInfo);
return camAgent.GetCurrentFlyingIdx();
}
/// <summary>
/// 플라잉 이미지 가져오기
/// </summary>
/// <param name="fovInfo">FOV 정보</param>
/// <param name="flyingIdx">플라잉 인덱스</param>
/// <returns>플라잉 이미지</returns>
public static object GetFlyingImage(FovInfo fovInfo, int flyingIdx) {
var camAgent = CameraAgentManager.GetCameraAgent(fovInfo);
return camAgent.GetFlyingImage(flyingIdx);
}
/// <summary>
/// 플라잉 이미지 전체 가져오기
/// </summary>
/// <param name="fovInfo">FOV 정보</param>
/// <returns>플라잉 이미지 전체</returns>
public static object[] GetFlyingImages(FovInfo fovInfo) {
var camAgent = CameraAgentManager.GetCameraAgent(fovInfo);
return camAgent.GetFlyingImages();
}
/// <summary>
/// 플라잉 합성(원장) 이미지 가져오기. *원장 : Child 이미지를 조합하여 한 장으로 만듬
/// </summary>
/// <returns>플아잉 합성(원장) 이미지</returns>
public static object GetParentImage(FovInfo fovInfo) {
var camAgent = CameraAgentManager.GetCameraAgent(fovInfo);
return camAgent.GetParentImage();
}
/// <summary>
/// 플라잉 조명 설정
/// </summary>
/// <param name="fovInfo">FOV 정보</param>
/// <param name="alignInfo">얼라인 정보</param>
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.");
}
}
}
}