184 lines
5.8 KiB
C#
184 lines
5.8 KiB
C#
|
|
using MainShell.AlgorithmCalib.Service;
|
|||
|
|
using MainShell.Hardware;
|
|||
|
|
using MaxwellFramework.Core.Interfaces;
|
|||
|
|
using MwFramework.Controls.Components;
|
|||
|
|
using MwFramework.ManagerService;
|
|||
|
|
using Stylet;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Collections.ObjectModel;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
using System.Windows.Input;
|
|||
|
|
|
|||
|
|
namespace MainShell.AlgorithmCalib.ViewModel
|
|||
|
|
{
|
|||
|
|
public class FusionCalibViewModel:Screen,IPage
|
|||
|
|
{
|
|||
|
|
private HardwareManager _hardware;
|
|||
|
|
private FusionCalibMotionService _fusionCalibMotionService;
|
|||
|
|
public ICommand PrevCommand { get; set; }
|
|||
|
|
public ICommand NextCommand { get; set; }
|
|||
|
|
private IParameterManager _parameterManager;
|
|||
|
|
public string Name { get; set; } = "FusionCalib";
|
|||
|
|
private bool _isInit = false;
|
|||
|
|
|
|||
|
|
private ObservableCollection<Screen> _Screens;
|
|||
|
|
/// <summary>
|
|||
|
|
/// 需要显示的界面
|
|||
|
|
/// </summary>
|
|||
|
|
public ObservableCollection<Screen> Screens
|
|||
|
|
{
|
|||
|
|
get { return _Screens; }
|
|||
|
|
set
|
|||
|
|
{ SetAndNotify(ref _Screens, value); }
|
|||
|
|
}
|
|||
|
|
private Screen _ShowScreenVM;
|
|||
|
|
/// <summary>
|
|||
|
|
/// 当前显示界面的VM
|
|||
|
|
/// </summary>
|
|||
|
|
public Screen ShowScreenVM
|
|||
|
|
{
|
|||
|
|
get { return _ShowScreenVM; }
|
|||
|
|
set
|
|||
|
|
{ SetAndNotify(ref _ShowScreenVM, value); }
|
|||
|
|
}
|
|||
|
|
private string _currentCalibName;
|
|||
|
|
/// <summary>
|
|||
|
|
/// 当前标定名称,供UI标定
|
|||
|
|
/// </summary>
|
|||
|
|
public string CurrentCalibName
|
|||
|
|
{
|
|||
|
|
get { return _currentCalibName; }
|
|||
|
|
set { SetAndNotify(ref _currentCalibName, value); }
|
|||
|
|
}
|
|||
|
|
private string _progressText;
|
|||
|
|
/// <summary>
|
|||
|
|
/// 进度提示
|
|||
|
|
/// </summary>
|
|||
|
|
public string ProgressText
|
|||
|
|
{
|
|||
|
|
get { return _progressText; }
|
|||
|
|
set { SetAndNotify(ref _progressText, value); }
|
|||
|
|
}
|
|||
|
|
private int _showIndex;
|
|||
|
|
/// <summary>
|
|||
|
|
/// 当前显示界面的下标
|
|||
|
|
/// </summary>
|
|||
|
|
public int ShowIndex
|
|||
|
|
{
|
|||
|
|
get { return _showIndex; }
|
|||
|
|
set
|
|||
|
|
{ SetAndNotify(ref _showIndex, value); }
|
|||
|
|
}
|
|||
|
|
private bool _isEnablePrev;
|
|||
|
|
/// <summary>
|
|||
|
|
/// 上一个按钮是否启用
|
|||
|
|
/// </summary>
|
|||
|
|
public bool IsEnablePrev
|
|||
|
|
{
|
|||
|
|
get { return _isEnablePrev; }
|
|||
|
|
set
|
|||
|
|
{ SetAndNotify(ref _isEnablePrev, value); }
|
|||
|
|
}
|
|||
|
|
private bool _isEnableNext = true;
|
|||
|
|
/// <summary>
|
|||
|
|
/// 下一个按钮是否启用
|
|||
|
|
/// </summary>
|
|||
|
|
public bool IsEnableNext
|
|||
|
|
{
|
|||
|
|
get { return _isEnableNext; }
|
|||
|
|
set
|
|||
|
|
{ SetAndNotify(ref _isEnableNext, value); }
|
|||
|
|
}
|
|||
|
|
public FusionCalibViewModel(IParameterManager paraManager)
|
|||
|
|
{
|
|||
|
|
_hardware = IoC.Get<HardwareManager>();
|
|||
|
|
_fusionCalibMotionService=IoC.Get<FusionCalibMotionService>();
|
|||
|
|
this._parameterManager = paraManager;
|
|||
|
|
PrevCommand = new DelegateCommand(() =>
|
|||
|
|
{
|
|||
|
|
OnPrev();
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
NextCommand = new DelegateCommand(() =>
|
|||
|
|
{
|
|||
|
|
OnNext();
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
protected override void OnViewLoaded()
|
|||
|
|
{
|
|||
|
|
base.OnViewLoaded();
|
|||
|
|
if (!_isInit)
|
|||
|
|
{
|
|||
|
|
Screens = new ObservableCollection<Screen>();
|
|||
|
|
var cameraConfigs = new List<(string Name, string FileSaveName, List<HardwareDevice> Device)>
|
|||
|
|
{
|
|||
|
|
("Die融合标定","topWsCameraFusion", _hardware.CameraAxisManager.TopCameraWsAxisDevices),
|
|||
|
|
("Map相机融合标定","wideCameraFusion", _hardware.CameraAxisManager.WideCameraAxisDevices),
|
|||
|
|
};
|
|||
|
|
Screens.Add(FusionMenuCalibViewModel.Create("Pad融合标定", "topCameraFusion", _hardware.CameraAxisManager.TopCameraAxisDevices,_hardware,_fusionCalibMotionService));
|
|||
|
|
|
|||
|
|
foreach (var (name, fileSaveName, device) in cameraConfigs)
|
|||
|
|
{
|
|||
|
|
Screens.Add(CameraFusionCalibViewModel.Create(name, fileSaveName, device, _hardware, _fusionCalibMotionService));
|
|||
|
|
}
|
|||
|
|
// 默认显示第一个
|
|||
|
|
ShowIndex = 0;
|
|||
|
|
ShowScreenVM = Screens[0];
|
|||
|
|
UpdateNavigationState();
|
|||
|
|
_isInit = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void viewUnLoad()
|
|||
|
|
{
|
|||
|
|
//_device.ChangeCameraMode(CameraTriggerMode.On);
|
|||
|
|
//_pLCControlOperation.CyliderPress(true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void OnPrev()
|
|||
|
|
{
|
|||
|
|
if (ShowIndex <= 0) return;
|
|||
|
|
|
|||
|
|
ShowIndex--;
|
|||
|
|
ShowScreenVM = Screens[ShowIndex];
|
|||
|
|
UpdateNavigationState(); // ← 加上这行
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void OnNext()
|
|||
|
|
{
|
|||
|
|
if (ShowIndex >= Screens.Count - 1) return;
|
|||
|
|
|
|||
|
|
ShowIndex++;
|
|||
|
|
ShowScreenVM = Screens[ShowIndex];
|
|||
|
|
UpdateNavigationState(); // ← 加上这行
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 统一更新导航状态和当前相机信息
|
|||
|
|
/// </summary>
|
|||
|
|
private void UpdateNavigationState()
|
|||
|
|
{
|
|||
|
|
IsEnablePrev = ShowIndex > 0;
|
|||
|
|
IsEnableNext = ShowIndex < Screens.Count - 1;
|
|||
|
|
|
|||
|
|
// 更新当前相机名称
|
|||
|
|
if (ShowScreenVM is CameraFusionCalibViewModel camVm)
|
|||
|
|
{
|
|||
|
|
CurrentCalibName = camVm.CalibName;
|
|||
|
|
}
|
|||
|
|
if (ShowScreenVM is FusionMenuCalibViewModel Vm)
|
|||
|
|
{
|
|||
|
|
CurrentCalibName = Vm.CalibName;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 更新进度
|
|||
|
|
ProgressText = $"{ShowIndex + 1} / {Screens.Count}";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|