147 lines
5.5 KiB
C#
147 lines
5.5 KiB
C#
using Aurora;
|
|
using Aurora.Api;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Windows;
|
|
using VisionCommon;
|
|
using VisionCalibrator;
|
|
using VisionSequence.Setup;
|
|
using System.Linq;
|
|
using System.Reactive.Linq;
|
|
using VisionCommonUI;
|
|
using VisionCommonUI.Resources;
|
|
|
|
namespace VisionUI.Setup {
|
|
/// <summary>
|
|
/// 캘리브레이션 뷰 모델
|
|
/// </summary>
|
|
class CalViewModel : INotifyPropertyChanged {
|
|
private Logger Log = new Logger("CalViewModel");
|
|
private ISequence _CalSeq;
|
|
|
|
private SubSysInfo _SubSysInfo;
|
|
|
|
private List<CalResultItem> _CalItems;
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
/// <summary>캘리브레이션 세팅 뷰 모델</summary>
|
|
public CalSettingViewModel _CalSettingViewModel;
|
|
/// <summary>캘리브레이션 로그 뷰 모델</summary>
|
|
public CalLogViewModel _CalLogViewModel;
|
|
/// <summary>캘리브레이션 파라미터 뷰 모델</summary>
|
|
public CalParamViewModel _CalParamViewModel;
|
|
/// <summary>
|
|
/// 생성자
|
|
/// </summary>
|
|
/// <param name="subSysInfo">서브시스템 정보</param>
|
|
public CalViewModel(SubSysInfo subSysInfo) {
|
|
_SubSysInfo = subSysInfo;
|
|
_CalItems = new List<CalResultItem>();
|
|
|
|
VisionEnv.AuroraEnv.EventObservable.AsObservable(VisionEventId.CALIBRATION_SUB_SEQ_LOG_UPDATE)
|
|
//.Select(msg => ((ValueTuple<PlanItem>)msg.Param))
|
|
.Select(msg => msg.Param)
|
|
.ObserveOnDispatcher()
|
|
.Subscribe(x => UpdateLog((PlanItem)x));
|
|
}
|
|
/// <summary>
|
|
/// 캘리브레이션 세팅 뷰 모델 설정(할당 및 이벤트 연결)
|
|
/// </summary>
|
|
/// <param name="calSettingViewModel">캘리브레이션 세팅 뷰 모델</param>
|
|
public void SetCalSettingViewModel(CalSettingViewModel calSettingViewModel) {
|
|
_CalSettingViewModel = calSettingViewModel;
|
|
_CalSettingViewModel.CalPlanCreated += PlanCreated;
|
|
_CalSettingViewModel.CancelSequence += SequenceStop;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 캘리브레이션 로그 뷰 모델 설정(할당)
|
|
/// </summary>
|
|
/// <param name="calLogViewModel">캘리브레이션 로그 뷰 모델</param>
|
|
public void SetCalLogViewModel(CalLogViewModel calLogViewModel) {
|
|
_CalLogViewModel = calLogViewModel;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 캘리브레이션 파라미터 뷰 모델 설정(할당)
|
|
/// </summary>
|
|
/// <param name="calParamViewModel">캘리브레이션 파라미터 뷰 모델</param>
|
|
public void SetCalParamViewModel(CalParamViewModel calParamViewModel) {
|
|
_CalParamViewModel = calParamViewModel;
|
|
}
|
|
|
|
private void UpdateLog(PlanItem item) {
|
|
if(_CalLogViewModel != null) {
|
|
var planItem = item.Clone();
|
|
if (VisionSettingManager.VisionSetting.CoordUnit == eCoordUnit.UM) {
|
|
planItem.X = $"{MathUtil.ConvertUnitMilliToMicro(Double.Parse(planItem.X))}";
|
|
planItem.Y = $"{MathUtil.ConvertUnitMilliToMicro(Double.Parse(planItem.Y))}";
|
|
}
|
|
Application.Current.Dispatcher.Invoke(() => _CalLogViewModel.PlanListItems.Add(planItem));
|
|
UpdateCsvLog(planItem);
|
|
}
|
|
}
|
|
|
|
private void PlanCreated(object sender, CalSeqParams e) {
|
|
_CalLogViewModel.PlanListItems.Clear();
|
|
ClearCsvLog();
|
|
|
|
var InitParam = e;
|
|
|
|
CalSeqParams calProcSeqParam = new CalSeqParams();
|
|
calProcSeqParam.SubSysInfo = InitParam.SubSysInfo;
|
|
calProcSeqParam.DisplayType = InitParam.DisplayType;
|
|
calProcSeqParam.PlanItems = InitParam.PlanItems.ToList();
|
|
calProcSeqParam.CalSetupRecipe = InitParam.CalSetupRecipe;
|
|
|
|
_CalSeq = VisionEnv.AuroraEnv.SequenceEntry[VisionKeys.CalSeqKey];
|
|
_CalSeq?.Start(calProcSeqParam, OnCompleted);
|
|
}
|
|
|
|
|
|
private void OnCompleted(SequenceActionResult SeqResult) {
|
|
if (SeqResult.Param == null) {
|
|
MessageBoxUtil.ShowMessageBoxError(
|
|
string.Format(StrTokens.MSG_E_CalSeqStop));
|
|
return;
|
|
}
|
|
var results = SeqResult.Param as CalCalculateResultParams;
|
|
if (results.Results.Count > 0) {
|
|
_CalParamViewModel.SetCalResult(results.Results, _CalSettingViewModel.CalSetupRecipe);
|
|
SaveCsvLog();
|
|
}
|
|
else {
|
|
MessageBoxUtil.ShowMessageBoxError(
|
|
string.Format(StrTokens.MSG_E_CalCalculationStop));
|
|
}
|
|
}
|
|
|
|
private void ClearCsvLog() {
|
|
_CalItems.Clear();
|
|
}
|
|
|
|
private void UpdateCsvLog(PlanItem item) {
|
|
_CalItems.Add(CalItemManager.GetCalItem(_SubSysInfo, item));
|
|
}
|
|
|
|
private void SaveCsvLog() {
|
|
var csvManager = new CsvManager();
|
|
csvManager.SaveCsv(_SubSysInfo, _CalItems, eSaveDataType.Calibration);
|
|
}
|
|
|
|
private void SequenceStop(object sender, EventArgs e) {
|
|
if (_CalSeq == null)
|
|
return;
|
|
|
|
_CalSeq.EmergencyStop();
|
|
}
|
|
|
|
private void NotifyPropertyChanged(string propName) {
|
|
PropertyChanged?.Invoke(
|
|
this,
|
|
new PropertyChangedEventArgs(propName));
|
|
}
|
|
}
|
|
}
|