2026-01-26 18:56:53 +09:00

236 lines
9.5 KiB
C#

using Aurora.Api;
using System;
using System.Windows;
using System.Windows.Controls;
using VisionCommon;
using VisionCommonUI;
using VisionCommonUI.Resources;
namespace MilUI {
/// <summary>
/// Interaction logic for VisionImageTestView.xaml
/// </summary>
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
}
}