using Cognex.VisionPro; using Cognex.VisionPro.ToolBlock; using Prism.Commands; using Prism.Events; using Prism.Ioc; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; using System.Windows; using Team.FFFeederService.Interfaces; using TeamAAS_VP.Core; using TeamAAS_VP.Interfaces; using TeamAAS_VP.Models; using TeamAAS_VP; namespace TeamAAS_VP.ViewModels.Calibration { public class CalibrationCameraParamsViewModel : BindableBase { IRegionManager _regionManager; IRegionNavigationService _regionNavigationService; IContainerProvider _container; IDialogService _dialogService; IEventAggregator _eventAggregator; #region 属性 private CalibrationInfo _SelectCalibration; public CalibrationInfo SelectCalibration { get { return _SelectCalibration; } set { SetProperty(ref _SelectCalibration, value); } } private IRobot _Robot; public IRobot Robot { get { return _Robot; } set { SetProperty(ref _Robot, value); } } private IVoiceCoilMotorFeeder _Feeder; public IVoiceCoilMotorFeeder Feeder { get { return _Feeder; } set { SetProperty(ref _Feeder, value); } } private ICamera _Camera; public ICamera Camera { get { return _Camera; } set { SetProperty(ref _Camera, value); } } private bool _IsShowLight; public bool IsShowLight { get { return _IsShowLight; } set { SetProperty(ref _IsShowLight, value); } } private float _ExposureTime; /// /// 相机曝光时间 /// public float ExposureTime { get { return _ExposureTime; } set { SetProperty(ref _ExposureTime, value); SelectCalibration.ExposureTime = value; if (Camera != null) { try { Camera.SetExposureTime(value); } catch (Exception) { } } } } private float _Gain; /// /// 相机增益 /// public float Gain { get { return _Gain; } set { SetProperty(ref _Gain, value); SelectCalibration.Gain = value; if (Camera != null) { try { Camera.SetGain(value); } catch (Exception) { } } } } private ICogImage _Image; public ICogImage Image { get { return _Image; } set { SetProperty(ref _Image,value); } } #endregion #region 命令 private DelegateCommand _LoadedCommand; public DelegateCommand LoadedCommand => _LoadedCommand ?? (_LoadedCommand = new DelegateCommand(ExecuteLoadedCommand)); private DelegateCommand _NextCommand; public DelegateCommand NextCommand => _NextCommand ?? (_NextCommand = new DelegateCommand(ExecuteNextCommand)); private DelegateCommand _BackCommand; public DelegateCommand BackCommand => _BackCommand ?? (_BackCommand = new DelegateCommand(ExecuteBackCommand)); private DelegateCommand _LightValueChangedCommand; public DelegateCommand LightValueChangedCommand => _LightValueChangedCommand ?? (_LightValueChangedCommand = new DelegateCommand(ExecuteLightValueChangedCommand)); private DelegateCommand _StartGrabbingCommand; public DelegateCommand StartGrabbingCommand => _StartGrabbingCommand ?? (_StartGrabbingCommand = new DelegateCommand(ExecuteStartGrabbingCommand)); private DelegateCommand _StopGrabbingCommand; public DelegateCommand StopGrabbingCommand => _StopGrabbingCommand ?? (_StopGrabbingCommand = new DelegateCommand(ExecuteStopGrabbingCommand)); #endregion #region 事件 #endregion public CalibrationCameraParamsViewModel(IRegionManager regionManager, IEventAggregator ea, IRegionNavigationService regionNavigationService, IContainerProvider container, IDialogService dialogService) { _regionManager = regionManager; _regionNavigationService = regionNavigationService; _container = container; _dialogService = dialogService; _eventAggregator = ea; SelectCalibration = _container.Resolve().SelectCalibration; } #region 方法 async void ExecuteLoadedCommand() { try { if (_container.Resolve().CurrentUser.userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } SelectCalibration = _container.Resolve().SelectCalibration; Camera = _container.Resolve().CameraService.GetCamera(SelectCalibration.CameraID); if (SelectCalibration.ExposureTime == 0) { SelectCalibration.ExposureTime = 5000; } ExposureTime = SelectCalibration.ExposureTime; Gain = SelectCalibration.Gain; if (Camera != null) { Camera.SetExposureTime(ExposureTime); Camera.SetGain(Gain); Camera.ImageCallbackEvent += Camera_ImageCallbackEvent; //Camera.Grab(); } if (SelectCalibration.IsCreate && SelectCalibration.ToolBlock == null) { SelectCalibration.ToolBlock = CogSerializer.LoadObjectFromFile(FilePath.CalibrationToolblockPath) as CogToolBlock; } else if (SelectCalibration.ToolBlock == null) { string prcPath = FilePath.CalibrationPath + "//" + SelectCalibration.Name + "//" + SelectCalibration.Name + ".vpp"; if (File.Exists(prcPath)) { SelectCalibration.ToolBlock = CogSerializer.LoadObjectFromFile(prcPath) as CogToolBlock; } else { SelectCalibration.ToolBlock = CogSerializer.LoadObjectFromFile(FilePath.CalibrationToolblockPath) as CogToolBlock; } } if (SelectCalibration.RobotId != Guid.Empty) { Robot = _container.Resolve().RobotService.GetRobot(SelectCalibration.RobotId); } if (SelectCalibration.FeederId != Guid.Empty) { Feeder = _container.Resolve().FeederService.GetFeeder(SelectCalibration.FeederId); if (Feeder.IsConnected) { await Feeder.OpenLightAsync(); await Feeder.SetLightValueAsync((ushort)SelectCalibration.Brightness); } IsShowLight = true; } else { IsShowLight = false; } } catch (Exception ex) { LogHelper.WriteLogError("相机校准加载相机参数界面时出错!", ex); MessageBox.Show(ex.Message); } } /// /// 下一步 /// void ExecuteNextCommand() { SelectCalibration.ExposureTime = ExposureTime; SelectCalibration.Gain = Gain; if (Camera != null) { Camera.StopGrabbing(); Camera.ImageCallbackEvent -= Camera_ImageCallbackEvent; } _regionManager.RequestNavigate("CalibrationRegionContext", "CalibrationEditVision"); } /// /// 上一步 /// void ExecuteBackCommand() { if (Camera != null) { Camera.StopGrabbing(); Camera.ImageCallbackEvent -= Camera_ImageCallbackEvent; } _regionManager.RequestNavigate("CalibrationRegionContext", "CalibrationBasics"); } /// /// 光源亮度调整时 /// async void ExecuteLightValueChangedCommand(double? lightvalue) { try { if (lightvalue == null) return; if (Feeder == null || !Feeder.IsConnected) return; await Feeder.SetLightValueAsync((ushort)lightvalue); } catch (Exception ex) { LogHelper.WriteLogError("相机校准光源亮度调整时出错!", ex); MessageBox.Show(ex.Message); } } /// /// 停止采集 /// void ExecuteStopGrabbingCommand() { if (Camera != null) Camera.StopGrabbing(); } /// /// 开始采集 /// void ExecuteStartGrabbingCommand() { if (Camera != null) Camera.StartGrabbing(); } private void Camera_ImageCallbackEvent(ICogImage image,TimeSpan totaltime,string errormessage) { Image = image; } #endregion private bool _IsAllowEdit = false; public bool IsAllowEdit { get { return _IsAllowEdit; } set { SetProperty(ref _IsAllowEdit, value); } } private void LoginChange(Models.User user) { if (user.userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } } } }