/* * Copyright (c) 2025 LG Electronics Inc. * SPDX-License-Identifier: LicenseRef-LGE-Proprietary */ using Aurora.Api; using CogCommon; using VisionCommon; using Hermes; using Cognex.VisionPro; using System; using System.IO; using System.Drawing; using VisionCommonUI; namespace CogPattern { /// /// 밝기 설정 클래스 /// public class Brightness : PatternBase, IPatternFinder, IDisposable { /// public string FILE_EXT_PATTERN { get; set; } // 불필요 private BrightnessParamExt _paramExt = null; private readonly Logger _logger; private readonly PatternInfo _patternInfo; /// /// 밝기 설정 클래스 생성자 /// /// 패턴 정보 public Brightness(PatternInfo patternInfo) { _patternInfo = patternInfo; _logger = new Logger( $"Brightness_{patternInfo.GetPatternIndex()}"); InitContext(); } private void InitContext() { if (E1.OK != Load()) { Create(); } } /// /// 패턴 파일 경로 /// /// 문자열 public string GetPatternFilePath(string patternName = PatternConstants.FILE_NAME_PATTERN) { return Path.Combine(new string[] { PatternConstants.GetSubPatternDirPath(_patternInfo), patternName + FILE_EXT_PATTERN }); } /// /// 밝기 정보 파일 불러오기 /// /// 성공 유무 public int Load() { var patternFilePath = GetPatternFilePath(); if (!File.Exists(patternFilePath)) { _logger.I($"Pattern File does NOT exist : {patternFilePath}"); return E2.NOT_FOUND; } _paramExt = LoadParamExt(); return E1.OK; } /// /// 밝기 정보 파일 저장 /// /// 성공 유무 public int Save() { var patternFilePath = GetPatternFilePath(); var patternDirPath = Path.GetDirectoryName(patternFilePath); if (!Directory.Exists(patternDirPath)) { Directory.CreateDirectory(patternDirPath); } return SaveParamExt(_paramExt); } /// /// 밝기 정보 생성 /// /// 성공 유무 public int Create() { _paramExt = LoadParamExt(); return E1.OK; } /// /// 밝기 정보 파일 제거 /// /// 성공 유무 public int Remove() { var patternFilePath = GetPatternFilePath(); var patternDirPath = Path.GetDirectoryName(patternFilePath); if (Directory.Exists(patternDirPath)) { Directory.Delete(patternDirPath, recursive: true); } return E1.OK; } /// /// ROI영역 가져오기 /// /// ROI Class public ROI GetFindROI() { return _paramExt.FindROI.Clone() as ROI; } /// /// ROI영역 설정 /// /// ROI영역 /// 성공 유무 public int SetFindROI(ROI findRoi) { if (ROI.IsNullOrEmpty(findRoi)) { return E1.GENERIC; } _paramExt.FindROI = findRoi.Clone() as ROI; return E1.OK; } /// /// 밝기 설정 파라미터 가져오기 /// /// IRunParam public IRunParam GetRunParam() { return new BrightnessRunParam() { BrightnessParamExt = _paramExt.Clone() as BrightnessParamExt }; } /// /// 밝기 설정 파라미터 설정하기 /// /// 성공 유무 public int SetRunParam(IRunParam runParam) { _paramExt = ((BrightnessRunParam)runParam).BrightnessParamExt.Clone() as BrightnessParamExt; return E1.OK; } /// /// 설정된 밝기로 패턴 찾기 /// /// 이미지 /// 패턴 결과 public PatternResult Find(object image) { return CogBrightness.Find((ICogImage)image, _paramExt.FindROI.Clone() as ROI, _paramExt); } /// /// 설정된 밝기로 패턴 찾기 /// /// 이미지 /// ROI /// 패턴 결과 public PatternResult Find(object image, ROI findRoi) { return CogBrightness.Find((ICogImage)image, findRoi, _paramExt); } /// /// 찾지 못한 결과 가져오기 /// /// 패턴 결과 public PatternResult GetNotFoundPatternResult() { return CogBrightness.GetNotFoundPatternResult(); } /// /// GetTool /// public object GetTool() { throw new NotImplementedException(); } /// /// 결과 그리기 /// /// 결과정보 /// 결과표시될 Display /// 픽스쳐 여부 public void Draw( PatternResult patternResult, ICameraDisplay cameraDisplay, bool isFixturePattern = false) { CogBrightness.Draw(patternResult, cameraDisplay as ICogCameraDisplay); } /// /// 밝기 설정 아이콘 가져오기 /// /// 비트맵 public Bitmap GetThumbnail() { return ThumbnailImage.Brightness(); } #region IDisposible /// /// 자원 회수 /// public void Dispose() { } #endregion #region Brightness Specific /// /// 확장 파라미터 불러오기 /// /// BrightnessParamExt public BrightnessParamExt LoadParamExt() { return BrightnessParamExt.Load(PatternConstants.GetSubPatternDirPath(_patternInfo)); } /// /// 확장 파라미터 저장하기 /// /// 성공 유무 public int SaveParamExt(BrightnessParamExt brightnessParamExt) { return BrightnessParamExt.Save( PatternConstants.GetSubPatternDirPath(_patternInfo), brightnessParamExt); } #endregion } }