/* * Copyright (c) 2025 LG Electronics Inc. * SPDX-License-Identifier: LicenseRef-LGE-Proprietary */ using System; using Aurora.Api; using Aurora.View; using VisionCommon; using MilPattern; using Hermes; using VisionCommonUI; using VisionCommonUI.Resources; using System.Windows.Input; namespace MilUI { public class MultiOcrParamSettingViewModel : NotifyPropertyChangedBase, IDisposable { private Logger _logger = new Logger(typeof(MultiOcrParamSettingViewModel).Name); public ICommand CMD_Edit { get; } #region Binding Properties private PatternInfo _PatternInfo; public PatternInfo PatternInfo { get => _PatternInfo; set => SetProperty(ref _PatternInfo, value); } private eRoiIdx _RoiIdx; public eRoiIdx RoiIdx { get => _RoiIdx; set => SetProperty(ref _RoiIdx, value); } private OcrRunParam _runParam; public OcrRunParam RunParam { get => _runParam; set => SetProperty(ref _runParam, value); } #endregion private PatternAgentBase _patternAgent; private CameraDisplay _cameraDisplay; private FovInfo _fovInfo; public MultiOcrParamSettingViewModel( PatternAgentBase patternAgent, PatternInfo subPatternInfo, CameraDisplay cameraDisplay, FovInfo fovInfo, eRoiIdx roiIdx) { _patternAgent = patternAgent; _cameraDisplay = cameraDisplay; _fovInfo = fovInfo; PatternInfo = subPatternInfo; RoiIdx = roiIdx; CMD_Edit = new DelegateCommand(Edit); CreatePattern(); } public void SetEnabled(bool isActivated) { PatternInfo.IsActivated = isActivated; } public void CreatePattern() { if (!_patternAgent.IsPatternExist(PatternInfo.GetPatternIndex())) { if (E1.OK == _patternAgent.Create(PatternInfo)) { SetEnabled(false); RunParam = new OcrRunParam(); _patternAgent.SetRunParam(PatternInfo, RunParam); if (E1.OK != _patternAgent.Save(PatternInfo)) { _logger.FuncE("Failed to save multi OCR."); } } else { _logger.FuncE("Failed to create multi OCR."); } } else { RunParam = (_patternAgent.GetRunParam(PatternInfo) as OcrRunParam).Clone() as OcrRunParam; } } private void Edit(object obj) { _patternAgent.ReloadPattern(PatternInfo); var window = new OcrSettingWindow(_patternAgent, PatternInfo, _cameraDisplay, _fovInfo, false); window.Show(); } public void Clear() { var subPatternIndex = PatternInfo.GetPatternIndex(); PatternInfo = _patternAgent.GetPatternInfo(subPatternIndex).Clone() as PatternInfo; RunParam = (_patternAgent.GetRunParam(PatternInfo) as OcrRunParam).Clone() as OcrRunParam; } public void Save() { _patternAgent.SetRunParam(PatternInfo, RunParam); _patternAgent.Save(PatternInfo); } public void Find() { var image = _cameraDisplay.GetImage(); if (image == null) { MessageBoxUtil.ShowMessageBoxError(StrTokens.MSG_E_ImageNotReady); return; } if (PatternInfo.IsActivated) { var oldRunParam = _patternAgent.GetRunParam(PatternInfo) as OcrRunParam; _patternAgent.SetRunParam(PatternInfo, RunParam); var patternResult = _patternAgent.Find(PatternInfo, image); _patternAgent.Draw(PatternInfo, patternResult, _cameraDisplay); _patternAgent.SetRunParam(PatternInfo, oldRunParam); // Find가 끝난 후, 원본 RunParam으로 복원 } } public void Dispose() { } } }