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

111 lines
3.9 KiB
C#

/*
* 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() {
}
}
}