236 lines
9.5 KiB
C#
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
|
|
}
|
|
}
|