120 lines
5.3 KiB
C#
120 lines
5.3 KiB
C#
/*
|
|
* Copyright (c) 2025 LG Electronics Inc.
|
|
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
|
|
*/
|
|
using Aurora.Api;
|
|
using Aurora.View;
|
|
using VisionCommon;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Reactive.Linq;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using VisionInspector;
|
|
using System.Reactive.Disposables;
|
|
|
|
namespace VisionUI.Inspector {
|
|
/// <summary>
|
|
/// 어태치 검사 로그 뷰 모델
|
|
/// </summary>
|
|
public class AttachInspLogViewModel : NotifyPropertyChangedBase {
|
|
private Logger _Logger = new Logger(typeof(AttachInspLogViewModel).Name);
|
|
|
|
private ObservableCollection<AttachInspResultItem> _AttachInspResultItems;
|
|
/// <summary>어태치 검사 결과 아이템 집합</summary>
|
|
public ObservableCollection<AttachInspResultItem> AttachInspResultItems { get => _AttachInspResultItems; set => SetProperty(ref _AttachInspResultItems, value); }
|
|
|
|
private DateTime selectedDate;
|
|
/// <summary>선택된 날짜</summary>
|
|
public DateTime SelectedDate { get => selectedDate; set { SetProperty(ref selectedDate, value); CalendarChanged(value); } }
|
|
|
|
private SubSysInfo _SubSysInfo;
|
|
private SubSysRecipe _SubSysRecipe;
|
|
private CsvManager _CsvManager = new CsvManager();
|
|
/// <summary>
|
|
/// 생성자
|
|
/// </summary>
|
|
/// <param name="subSysInfo">서브시스템 정보</param>
|
|
public AttachInspLogViewModel(SubSysInfo subSysInfo) {
|
|
_SubSysInfo = subSysInfo;
|
|
_SubSysRecipe = VisionRecipeManager.GetSubSysRecipe(_SubSysInfo);
|
|
AttachInspResultItems = new ObservableCollection<AttachInspResultItem>();
|
|
SelectedDate = DateTime.Now.Date;
|
|
|
|
SetObservable();
|
|
}
|
|
|
|
private void SetObservable() {
|
|
var disposable = VisionEnv.AuroraEnv.EventObservable.AsObservable(VisionEventId.UPDATE_ATTACH_INSP_RESULT).
|
|
Where(x => x.From == _SubSysInfo.GetKey()).Subscribe(attachInspResult => UpdateAttachInspResult(attachInspResult));
|
|
DisposableManager.AddDisposable(eDpsGroupKey.SubMenu_AttachInsp, disposable);
|
|
}
|
|
/// <summary>
|
|
/// 어태치 검사 결과 업데이트
|
|
/// </summary>
|
|
/// <param name="msg">이벤트 메세지</param>
|
|
public void UpdateAttachInspResult(EventMessage msg) {
|
|
var attachInspResult = msg.Param as AttachInspResult;
|
|
|
|
Application.Current.Dispatcher.BeginInvoke(
|
|
new Action(() => {
|
|
AttachInspResultItems.Add(AttachInspResultItemManager.GetAttachInspResultItem(_SubSysInfo, attachInspResult));
|
|
}));
|
|
|
|
// Dispatcher에 같이 넣을 경우, 전체적으로 느려질 수 있음
|
|
Task.Run(() => { PrintAttachInspResult(attachInspResult); });
|
|
}
|
|
|
|
// 부착 검사 결과를 화면에 텍스트로 뿌린다.
|
|
private void PrintAttachInspResult(AttachInspResult attachInspResult) {
|
|
var displayType = attachInspResult.DisplayType;
|
|
//var fovInfo = VisionRecipeManager.GetLastFovInfo(_SubSysInfo);
|
|
var fovInfo = VisionRecipeManager.GetFovInfo(_SubSysInfo, attachInspResult.FovId);
|
|
var cameraDisplay = CameraDisplayManager.GetDisplay(fovInfo, displayType);
|
|
|
|
var msgs = new List<string>();
|
|
msgs.Add(string.Format("FovId : {0}", attachInspResult.FovId));
|
|
msgs.Add(string.Format("MeasureW : {0:F3}", ConvertCoordUnit(attachInspResult.MeasureW)));
|
|
msgs.Add(string.Format("SpecW : {0}", ConvertCoordUnit(attachInspResult.SpecW)));
|
|
msgs.Add(string.Format("ErrW : {0:F3}", ConvertCoordUnit(attachInspResult.ErrW)));
|
|
msgs.Add(string.Format("MeasureH : {0:F3}", ConvertCoordUnit(attachInspResult.MeasureH)));
|
|
msgs.Add(string.Format("SpecH : {0}", ConvertCoordUnit(attachInspResult.SpecH)));
|
|
msgs.Add(string.Format("ErrH : {0:F3}", ConvertCoordUnit(attachInspResult.ErrH)));
|
|
msgs.Add(string.Format("Status : {0}", attachInspResult.InspStatus));
|
|
|
|
eColor color = IpViewManager.GetGraphicColor(attachInspResult.InspStatus);
|
|
ImagePoint printPos = new ImagePoint(30, 20);
|
|
cameraDisplay.AddTextList(color, printPos, msgs);
|
|
}
|
|
|
|
private double ConvertCoordUnit(double value) {
|
|
if (VisionSettingManager.VisionSetting.CoordUnit == eCoordUnit.UM) {
|
|
return MathUtil.ConvertUnitMilliToMicro(value);
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
private void CalendarChanged(DateTime dateTime) {
|
|
LoadCsv(dateTime);
|
|
}
|
|
|
|
private void LoadCsv(DateTime dateTime) {
|
|
try {
|
|
AttachInspResultItems?.Clear();
|
|
List<AttachInspResultItem> items =
|
|
_CsvManager.LoadCsv<AttachInspResultItem>(_SubSysInfo, dateTime, eSaveDataType.AttachInsp);
|
|
if (items != null) { // 로드할 파일이 없으면 items가 null임.
|
|
foreach (AttachInspResultItem item in items) {
|
|
AttachInspResultItems.Add(item);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e) {
|
|
_Logger.FuncE(e.Message);
|
|
}
|
|
}
|
|
}
|
|
}
|