using Aurora.Api; using System; using System.Windows; using System.Windows.Controls; using VisionCommon; using VisionCommonUI; using VisionCommonUI.Resources; namespace MilUI { /// /// Interaction logic for VisionImageTestView.xaml /// public partial class VisionImageTestView : UserControl, IDisposable { private SubSysInfo _SubSysInfo; private FovInfo _FovInfo; private eVisionTestType _VisionTestType; private PatternInfo _PatternInfo; private TabControl _TabControl; public VisionImageTestView(FovInfo fovInfo, eVisionTestType visionTestType, PatternInfo patternInfo = null) { _FovInfo = fovInfo; _SubSysInfo = _FovInfo.ToSubSysInfo(); _VisionTestType = visionTestType; if (patternInfo != null) { _PatternInfo = patternInfo; } InitializeComponent(); } private void Init() { if (_VisionTestType == eVisionTestType.Pattern || VisionRecipeManager.GetFovCnt(_SubSysInfo) == 1) { CreateCameraView_Single(); } else { CreateCameraView_Multi(); } CreateVisionImageTestSettingView(); CreateVisionImageTestLogView(); } private void CreateCameraView_Single() { var fovInfo = new FovInfo(_SubSysInfo, eFovId.Fov1); var cameraView = new CameraView(fovInfo, eDisplayType.ImageTest); gridCameraView.Children.Add(cameraView); } private void CreateCameraView_Multi() { // Create 2x2 grid var grid = new Grid(); var rowDef1 = new RowDefinition(); var rowDef2 = new RowDefinition(); var colDef1 = new ColumnDefinition(); var colDef2 = new ColumnDefinition(); grid.RowDefinitions.Add(rowDef1); grid.RowDefinitions.Add(rowDef2); grid.ColumnDefinitions.Add(colDef1); grid.ColumnDefinitions.Add(colDef2); var fovInfos = VisionRecipeManager.GetFovInfos(_SubSysInfo); foreach (var fovInfo in fovInfos) { var cameraView = new CameraView(fovInfo, eDisplayType.ImageTest); switch (fovInfo.FovId) { case eFovId.Fov1: Grid.SetRow(cameraView, 0); Grid.SetColumn(cameraView, 0); break; case eFovId.Fov2: Grid.SetRow(cameraView, 0); Grid.SetColumn(cameraView, 1); break; case eFovId.Fov3: Grid.SetRow(cameraView, 1); Grid.SetColumn(cameraView, 0); break; case eFovId.Fov4: Grid.SetRow(cameraView, 1); Grid.SetColumn(cameraView, 1); break; } grid.Children.Add(cameraView); } if (fovInfos.Count == 0 || grid.Children.Count < fovInfos.Count) { PrintRecipeError(typeof(FovRecipe).Name, gridCameraView); } else { gridCameraView.Children.Add(grid); } } private void PrintRecipeError(string recipeName, Grid grid) { var errMsg = string.Format(StrTokens.RecipeErrorMessage, recipeName); grid.Children.Add(new UCRecipeErrorTextBlock(errMsg) { Margin = new Thickness(15) }); grid.VerticalAlignment = VerticalAlignment.Center; grid.HorizontalAlignment = HorizontalAlignment.Center; } private void CreateVisionImageTestSettingView() { _TabControl = new TabControl(); _TabControl.Style = FindResource("styleSubMenuRootTabControl") as Style; _TabControl.Margin = new System.Windows.Thickness(3, 5, 3, 5); _TabControl.SelectionChanged += FovTabControl_SelectedIndexChanged; var fovInfos = VisionRecipeManager.GetFovInfos(_SubSysInfo); foreach (var fovInfo in fovInfos) { if(_VisionTestType != eVisionTestType.Pattern || fovInfo.FovId == _FovInfo.FovId) { var fovTabItem = new TabItem(); var fovRecipe = VisionRecipeManager.GetFovRecipe(fovInfo); fovTabItem.Header = fovRecipe.FovName; fovTabItem.Content = GetVisionImageTestSettingView(fovInfo); fovTabItem.Style = FindResource("styleSubMenuRootTabItem") as Style; _TabControl.Items.Add(fovTabItem); } } _TabControl.SelectedIndex = 0; if (fovInfos.Count == 0) { PrintRecipeError(typeof(FovRecipe).Name, gridVisionImageTestSettingView); } else { gridVisionImageTestSettingView.Children.Add(_TabControl); } } private void CreateVisionImageTestLogView() { gridVisionImageTestLogView.Children.Add(GetVisionImageTestLogView()); } private VisionImageTestSettingView GetVisionImageTestSettingView(FovInfo fovInfo) { var view = new VisionImageTestSettingView(fovInfo, _VisionTestType); if (_VisionTestType == eVisionTestType.Pattern) { var viewmodel = new VisionImageTestSettingViewModel(fovInfo, _VisionTestType, (DataContext as VisionImageTestViewModel).TotalImagePaths[fovInfo.FovId], _PatternInfo); view.DataContext = viewmodel; (DataContext as VisionImageTestViewModel).SetVisionImageTestSettingViewModel(viewmodel); } else { var viewmodel = new VisionImageTestSettingViewModel(fovInfo, _VisionTestType, (DataContext as VisionImageTestViewModel).TotalImagePaths[fovInfo.FovId]); view.DataContext = viewmodel; (DataContext as VisionImageTestViewModel).SetVisionImageTestSettingViewModel(viewmodel); } return view; } private VisionImageTestLogView GetVisionImageTestLogView() { if(_VisionTestType == eVisionTestType.Pattern) { var view = new VisionImageTestLogView(_FovInfo, _VisionTestType, _PatternInfo); var viewmodel = new VisionImageTestLogViewModel(_FovInfo, _VisionTestType, _PatternInfo); view.DataContext = viewmodel; (DataContext as VisionImageTestViewModel).SetVisionImageTestLogViewModel(viewmodel); return view; } else { var view = new VisionImageTestLogView(_FovInfo, _VisionTestType); var viewmodel = new VisionImageTestLogViewModel(_FovInfo, _VisionTestType); view.DataContext = viewmodel; (DataContext as VisionImageTestViewModel).SetVisionImageTestLogViewModel(viewmodel); return view; } } private void UserControl_Loaded(object sender, RoutedEventArgs e) { Init(); } private void FovTabControl_SelectedIndexChanged(object sender, EventArgs e) { if(_TabControl != null) { TabItem selectedTab = _TabControl.SelectedItem as TabItem; var view = selectedTab.Content as VisionImageTestSettingView; var viewModel = view.DataContext as VisionImageTestSettingViewModel; (DataContext as VisionImageTestViewModel).SetVisionImageTestSettingViewModel(viewModel); } } #region Dispose public void Dispose() { if (_VisionTestType == eVisionTestType.Pattern || VisionRecipeManager.GetFovCnt(_SubSysInfo) == 1) { RemoveCameraView_Single(); } else { RemoveCameraView_Multi(); } RemoveVisionImageTestSettingView(); RemoveVisionImageTestLogView(); } private void RemoveCameraView_Single() { foreach (var child in gridCameraView.Children) { if (child is UserControl view) { (view as CameraView).Dispose(); } } gridCameraView.Children.Clear(); } private void RemoveCameraView_Multi() { foreach (Grid child in gridCameraView.Children) { foreach (var innerChild in child.Children) { if (innerChild is UserControl view) { (view as CameraView).Dispose(); } } child.Children.Clear(); } gridCameraView.Children.Clear(); } private void RemoveVisionImageTestSettingView() { foreach (var child in gridVisionImageTestSettingView.Children) { var fovTabControl = child as TabControl; foreach (TabItem tabItem in fovTabControl.Items) { if (tabItem.Content is VisionImageTestSettingView view) { view = null; } } } gridVisionImageTestSettingView.Children.Clear(); } private void RemoveVisionImageTestLogView() { foreach (var child in gridVisionImageTestLogView.Children) { if (child is VisionImageTestLogView view) { view = null; } } gridVisionImageTestLogView.Children.Clear(); } #endregion } }