using Aurora; using Aurora.Api; using Aurora.Api.Devices; using Aurora.View; using VisionCommon; using System; using System.Windows; using System.Windows.Input; using VisionSequence.Setup; using VisionCommonUI; using VisionCommonUI.Resources; namespace VisionUI.Setup { /// /// 센터 튜닝 세팅 뷰 모델 /// class CenterTuningSettingViewModel : NotifyPropertyChangedBase, IUpdateRecipe { private SubSysInfo _SubSysInfo; private SubSysRecipe _SubSysRecipe; private ISequence _Seq; /// 얼라인 델타 처리 이벤트 핸들러 public event EventHandler AlignDelta; /// 시퀀스 시작 이벤트 핸들러 public event EventHandler SequenceStart; private CenterTuningRecipe _CenterTuningRecipe; /// 센터 튜닝 레시피 public CenterTuningRecipe CenterTuningRecipe { get => _CenterTuningRecipe; set => SetProperty(ref _CenterTuningRecipe, value); } #region ButtonCommand public ICommand ButtonCommandStart { get; set; } public ICommand ButtonCommandCancel { get; set; } public ICommand ButtonCommandSave { get; set; } #endregion /// /// 생성자 /// /// 서브 시스템 정보 public CenterTuningSettingViewModel(SubSysInfo subSysInfo) { _SubSysInfo = subSysInfo; _SubSysRecipe = VisionRecipeManager.GetSubSysRecipe(subSysInfo); ButtonCommandStart = new DelegateCommand(new Action(DoStart)); ButtonCommandCancel = new DelegateCommand(new Action(DoCancel)); ButtonCommandSave = new DelegateCommand(new Action(DoSave)); } /// /// 시작 /// /// null public void DoStart(object obj) { if (CenterTuningRecipe.MaxCnt < 1) { MessageBoxUtil.ShowMessageBoxWarning( string.Format(StrTokens.MSG_W_NumberUnderMinFormat, "MaxCnt", 1)); return; } else if (CenterTuningRecipe.MaxCnt > 30) { MessageBoxUtil.ShowMessageBoxWarning( string.Format(StrTokens.MSG_W_NumberOverMaxFormat, "MaxCnt", 30)); return; } _Seq = Application.Current.AuroraEnv().SequenceEntry[VisionKeys.CenterTuningSeqKey]; var param = new SetupSeqParams_CenterTuning(_SubSysInfo, CenterTuningRecipe, eDisplayType.CenterTuning); param.CallBackAlignDelta = AddAlignDelta; _Seq.Start(param, OnSeqCompleted); SequenceStart.Invoke(this, null); } /// /// 취소 /// /// null public void DoCancel(object obj) { _Seq?.Stop(); //CancelSequence.Invoke(this, new EventArgs()); } /// /// 저장 /// /// null public void DoSave(object obj) { UpdateRecipeFromUI(); RecipeFileManager.SaveVisionRecipe(); } private void OnSeqCompleted(SequenceActionResult seqResult) { int currentCnt = (int)seqResult.Param; VisionEnv.AuroraEnv.EventPublisher.Publish( new EventMessage(_SubSysInfo.SubSysName, VisionEventId.CENTERTUNING_COMPLETE, currentCnt)); } private void AddAlignDelta(Position position) { AlignDelta.Invoke(this, position); } public void RefreshVisionRecipes() { _SubSysRecipe = VisionRecipeManager.GetSubSysRecipe(_SubSysInfo); } public void UpdateRecipeFromFile() { var centerTuningRecipe = VisionRecipeManager.GetCenterTuningRecipe(_SubSysInfo); CenterTuningRecipe = centerTuningRecipe?.Clone(); } public void UpdateRecipeFromUI() { var centerTuningRecipe = VisionRecipeManager.GetCenterTuningRecipe(_SubSysInfo); CenterTuningRecipe?.CopyTo(centerTuningRecipe); } } }