using Aurora; using Aurora.Api; using Aurora.View; using VisionCommon; using MilPattern; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Reactive.Linq; using System.Windows; using System.Windows.Input; using VisionSequence.Pattern; using VisionCommonUI; using System.Windows.Controls; using VisionCommonUI.Resources; namespace MilUI { public class CamPatternListViewModel : PatternListViewModelBase { private SubSysInfo _SubSysInfo; private FovInfo _FovInfo; private FovRecipe _FovRecipe; private CameraView _CameraView; private eCamId _CamId; private readonly Logger _logger = new Logger("PatternListVM"); public CamPatternListViewModel( FovInfo fovInfo, CameraView cameraView) : base(fovInfo, PatternConstants.CAM_PATTERN_COUNT) { _SubSysInfo = fovInfo.ToSubSysInfo(); _FovInfo = fovInfo; _FovRecipe = VisionRecipeManager.GetFovRecipe(fovInfo); _CameraView = cameraView; var camRecipe = VisionRecipeManager.GetCamRecipe(fovInfo); _CamId = camRecipe.CamId; _patternAgent = CamPatternAgentManager.GetAgent(_CamId) as CamPatternAgent; InitPatternList(0); } public override PatternInfo CreateDefaultPatternInfo(int patternId) { return new CamPatternInfo() { PatternIndex = new CamPatternIndex(_CamId, patternId), PatternType = ePatternType.None, MilSystemId = FovPatternAgent.GetMilSystemId(_FovRecipe.CamRecipe.CamId), LightInfo = GetDefaultLightInfo() }; } public override void StartGrabFindSeq(PatternInfo patternInfo) { var manualFixtureProcSeq = ManualGrabFindSeqManager.GetSeq(_FovInfo); if (manualFixtureProcSeq == null) { _logger.FuncE("manualFixtureProcSeq is null."); } else if (manualFixtureProcSeq.RunState == SequenceRunState.Running) { _logger.FuncE("manualFixtureProcSeq is running."); } else if (manualFixtureProcSeq.RunState == SequenceRunState.Idle) { GrabFindSeqUtil.Clear(_SubSysInfo); var fixtureSeqParam = new GrabFindProcSeqParams( _FovInfo, patternInfo, eDisplayType.Pattern, seqMode: eSeqMode.Manual); manualFixtureProcSeq.Start(fixtureSeqParam); } else { _logger.FuncE("manualFixtureProcSeq is not idle."); } } public override void StartFindSeq(PatternInfo patternInfo) { var manualFindSeq = VisionEnv.AuroraEnv.SequenceEntry[VisionKeys.ManualFindSeqKey]; if (manualFindSeq != null && manualFindSeq.RunState == SequenceRunState.Idle) { var CameraDisplay = _CameraView.GetDisplay(); CameraDisplay.ClearMeasureGraphics(); var image = CameraDisplay.GetImage(); if (image == null) { MessageBoxUtil.ShowMessageBoxError(StrTokens.MSG_E_ImageNotReady); return; } var findSeqParam = new FindSeqParams( image, _FovInfo, patternInfo, eDisplayType.Pattern, seqMode: eSeqMode.Manual); manualFindSeq.Start(findSeqParam); } } public override void RegisterPatternWindow() { _window = new RegisterPatternWindow(_patternAgent, Patterns[SelectedPatternIndex].Clone() as PatternInfo); } public override void CreatePatternSettingWindow() { _window = CreatePatternSettingWindow( _patternAgent, Patterns[SelectedPatternIndex].Clone() as PatternInfo, _CameraView.GetDisplay()); } private Window CreatePatternSettingWindow( PatternAgentBase patternAgent, PatternInfo patternInfo, CameraDisplay milCameraDisplay) { return PatternViewUtil.CreatePatternSettingWindow( patternAgent, Patterns[SelectedPatternIndex].Clone() as PatternInfo, milCameraDisplay, _FovInfo); } } }