using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Input; using Aurora.Api; using Aurora.Api.DataType; using Aurora.View; using MilCommon; using VisionCommon; using MilPattern; using VisionCommonUI; using VisionCommonUI.Resources; namespace MilUI { public class BarCodeSettingViewModel : NotifyPropertyChangedBase { private Logger _logger = new Logger("BarCodeSettingViewModel"); public ICommand CMD_VisibleChanged { get; } public ICommand CMD_Save { get; } public ICommand CMD_Cancel { get; } public ICommand CMD_SetLight { get; } public ICommand CMD_SetFindROI { get; } public ICommand CMD_FindPattern { get; } private PatternInfo _patternInfo; public PatternInfo PatternInfo { get => _patternInfo; set => SetProperty(ref _patternInfo, value); } private CodeRunParam _runParam; public CodeRunParam RunParam { get => _runParam; set => SetProperty(ref _runParam, value); } private IEnumerable _fixturePatterns; public IEnumerable FixturePatterns { get => _fixturePatterns; set => SetProperty(ref _fixturePatterns, value); } public IEnumerable CodeTypeItems { get; } = Enum.GetValues(typeof(eMilCodeType)).Cast(); public IEnumerable ThresholdModeItems { get; } = Enum.GetValues(typeof(eMilThresholdMode)).Cast(); public IEnumerable SpeedItems { get; } = Enum.GetValues(typeof(eMilSpeed)).Cast(); private PatternAgentBase _patternAgent; private CameraDisplay _cameraDisplay; private FovInfo _fovInfo; private Window _window = null; public BarCodeSettingViewModel( PatternAgentBase patternAgent, PatternInfo patternInfo, CameraDisplay milCameraDisplay, FovInfo fovInfo) { _patternAgent = patternAgent; _patternInfo = patternInfo; _cameraDisplay = milCameraDisplay; _fovInfo = fovInfo; CMD_VisibleChanged = new DelegateCommand(VisibleChanged); CMD_Save = new DelegateCommand(Save); CMD_Cancel = new DelegateCommand(Cancel); CMD_SetLight = new DelegateCommand(SetLight); CMD_SetFindROI = new DelegateCommand(SetFindROI); CMD_FindPattern = new DelegateCommand(FindPattern); InitRunParam(); InitFixturePatterns(); } public void InitRunParam() { RunParam = _patternAgent.GetRunParam(_patternInfo) as CodeRunParam; } public void InitFixturePatterns() { FixturePatterns = _patternAgent.GetFixturePatternIndexListForFov(_patternInfo); } private void VisibleChanged(object obj) { bool visible = (bool)obj; if (visible == false) { ClosingWindow(); } } private void Save(object obj) { if (_cameraDisplay.HasFindRoi()) { RunParam.SetFindROI(_cameraDisplay.GetFindRoi().Clone() as ROI); } _patternAgent.SetRunParam(_patternInfo, RunParam); _patternAgent.Save(_patternInfo); MessageBoxUtil.ShowMessageBoxOk(StrTokens.MSG_O_SaveCompleted); } private void Cancel(object obj) { ClosingWindow(); CloseWindow(obj); } private void ClosingWindow() { _cameraDisplay.ClearFindGraphics(); } private void CloseWindow(object obj) { var window = obj as Window; if (window != null) { window.Close(); } } private void SetLight(object obj) { PatternLightWindowManager.ShowLightSettingWindow(_fovInfo, _patternInfo); } private void ResetWindow() { if (_window.WindowState == WindowState.Minimized) { _window.WindowState = WindowState.Normal; } (_window as IPatternSettingWindow).ResetPosition(); } private void OnWindowClosed(object sender, EventArgs e) { _window = null; } private void SetFindROI(object obj) { var milImage = _cameraDisplay.GetImage(); if (milImage != 0) { var imageSize = MilEnvironment.GetImageSize(milImage); var findRoi = GetFindROIFromRunParam(imageSize, RunParam); _cameraDisplay.AddFindRoi(findRoi); } } private ROI GetFindROIFromRunParam(ImageSize imageSize, CodeRunParam runParam) { if (runParam.IsValidFindRoi(imageSize)) { return runParam.GetFindRoi(); } return new ROI( new ImagePoint(imageSize.Width * 0.5, imageSize.Height * 0.5), 100, 300, Angle.CreateWithDegree(0)); } private void FindPattern(object obj) { if (!_patternInfo.IsActivated) { MessageBoxUtil.ShowMessageBoxError(StrTokens.MSG_E_PatternNotActivated); return; } if (_cameraDisplay != null) { var image = _cameraDisplay.GetImage(); if (image == null) { MessageBoxUtil.ShowMessageBoxError(StrTokens.MSG_E_ImageNotReady); return; } if (_cameraDisplay.HasFindRoi()) { RunParam.SetFindROI(_cameraDisplay.GetFindRoi().Clone() as ROI); } _cameraDisplay.ClearFindGraphics(); _cameraDisplay.ClearMeasureGraphics(); _patternAgent.SetRunParam(_patternInfo, RunParam); var patternResult = _patternAgent.Find(_patternInfo, image); _patternAgent.Draw(_patternInfo, patternResult, _cameraDisplay); if (patternResult.Status == eFoundStatus.NotFound) { MessageBoxUtil.ShowMessageBoxError(StrTokens.MSG_E_PatternNotFound); } } } } }