using Prism.Commands; using Prism.Events; using Prism.Ioc; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using SixLabors.Fonts.Unicode; using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using TeamAAS_VP.Events; using TeamAAS_VP.Core; using TeamAAS_VP.Interfaces; using TeamAAS_VP.Models; using TeamAAS_VP.ViewModels.Product; using System.Windows; using TeamAAS_VP; namespace TeamAAS_VP.ViewModels.Calibration { public class CalibrationTeachCenterPointViewModel : 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 bool _IsShowTechHome=false; public bool IsShowTechHome { get { return _IsShowTechHome; } set { SetProperty(ref _IsShowTechHome, value); } } public Management management { get; set; } public RobotService robotService { get; set; } private IRobot _Robot; public IRobot Robot { get { return _Robot; } set { SetProperty(ref _Robot, 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 _TechCenterCommand; public DelegateCommand TechCenterCommand => _TechCenterCommand ?? (_TechCenterCommand = new DelegateCommand(ExecuteTechCenterCommand)); private DelegateCommand _TechHomeCommand; public DelegateCommand TechHomeCommand => _TechHomeCommand ?? (_TechHomeCommand = new DelegateCommand(ExecuteTechHomeCommand)); private DelegateCommand _BlowOrInhalControlCommand; public DelegateCommand BlowOrInhalControlCommand => _BlowOrInhalControlCommand ?? (_BlowOrInhalControlCommand = new DelegateCommand(ExecuteBlowOrInhalControlCommand)); private DelegateCommand _TechMarkPointCommand; public DelegateCommand TechMarkPointCommand => _TechMarkPointCommand ?? (_TechMarkPointCommand = new DelegateCommand(ExecuteTechMarkPointCommand)); #endregion #region 事件 #endregion public CalibrationTeachCenterPointViewModel(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 方法 void ExecuteLoadedCommand() { if (_container.Resolve().CurrentUser.userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } try { management = _container.Resolve(); robotService = management.RobotService; SelectCalibration = _container.Resolve().SelectCalibration; if (SelectCalibration != null) { Robot = robotService.GetRobot(SelectCalibration.RobotId); if (SelectCalibration.CameraMount == Enums.CameraMount.FixedDown) { IsShowTechHome = true; } } else { IsShowTechHome = false; } } catch (Exception ex) { LogHelper.WriteLogError("相机校准-示教中心点界面加载时出错!", ex); MessageBox.Show(ex.Message); } } /// /// 下一步 /// void ExecuteNextCommand() { if (SelectCalibration.CameraMount== Enums.CameraMount.MobileDown_XYPlatform) { _regionManager.RequestNavigate("CalibrationRegionContext", "CalibrationAuto"); } else { _regionManager.RequestNavigate("CalibrationRegionContext", "CalibrationSelectTool"); } } /// /// 上一步 /// void ExecuteBackCommand() { _regionManager.RequestNavigate("CalibrationRegionContext", "CalibrationEditVision"); } /// /// 示教中心点 /// async void ExecuteTechCenterCommand() { if (Robot == null || !Robot.IsConnected) return; try { var curpos = await Robot.GetRobotPosAsync(); if (SelectCalibration.CenterPoint==null) { SelectCalibration.CenterPoint = new RPoint(); } SelectCalibration.CenterPoint.X = curpos.X; SelectCalibration.CenterPoint.Y = curpos.Y; SelectCalibration.CenterPoint.Z = curpos.Z; SelectCalibration.CenterPoint.U = curpos.U; SelectCalibration.CenterPoint.V = curpos.V; SelectCalibration.CenterPoint.W = curpos.W; SelectCalibration.CenterPoint.Hand = curpos.Hand; SelectCalibration.CenterPoint.Local = curpos.Local; SelectCalibration.CenterPoint.Tool = curpos.Tool; LogHelper.WriteLogInfo($"相机校准-示教中心点界面示教待机点:X:{SelectCalibration.CenterPoint.X} Y:{SelectCalibration.CenterPoint.Y} Z:{SelectCalibration.CenterPoint.Z} "); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = $"成功! X:{SelectCalibration.CenterPoint.X} Y:{SelectCalibration.CenterPoint.Y} Z:{SelectCalibration.CenterPoint.Z}", Duration = 1 }); } catch (Exception ex) { LogHelper.WriteLogError("相机校准-示教中心点界面示教中心点时出错!", ex); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = ex.Message, Duration = 1 }); } } /// /// 示教待机点 /// async void ExecuteTechHomeCommand() { if (Robot == null || !Robot.IsConnected) return; try { var curpos = await Robot.GetRobotPosAsync(); if (SelectCalibration.HomePoint == null) { SelectCalibration.HomePoint = new RPoint(); } SelectCalibration.HomePoint.X = curpos.X; SelectCalibration.HomePoint.Y = curpos.Y; SelectCalibration.HomePoint.Z = curpos.Z; SelectCalibration.HomePoint.U = curpos.U; SelectCalibration.HomePoint.V = curpos.V; SelectCalibration.HomePoint.W = curpos.W; SelectCalibration.HomePoint.Hand = curpos.Hand; SelectCalibration.HomePoint.Local = curpos.Local; SelectCalibration.HomePoint.Tool = curpos.Tool; _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = "成功!", Duration = 1 }); } catch (Exception ex) { LogHelper.WriteLogError("相机校准-示教中心点界面示教待机点时出错!", ex); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = ex.Message, Duration = 1 }); } } /// /// 夹爪打开/关闭 /// /// async void ExecuteBlowOrInhalControlCommand(object obj) { try { await Robot.CalibOutIOAsync(!(bool)obj); } catch (Exception ex) { LogHelper.WriteLogError("相机校准-夹爪打开/关闭点时出错!", ex); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = ex.Message, Duration = 1 }); } } /// /// 示教P0 /// async void ExecuteTechMarkPointCommand() { if (Robot == null || !Robot.IsConnected) return; try { var curpos = await Robot.GetRobotPosAsync(); if (SelectCalibration.MarkPoint == null) { SelectCalibration.MarkPoint = new RPoint(); } SelectCalibration.MarkPoint.X = curpos.X; SelectCalibration.MarkPoint.Y = curpos.Y; SelectCalibration.MarkPoint.Z = curpos.Z; SelectCalibration.MarkPoint.U = curpos.U; SelectCalibration.MarkPoint.V = curpos.V; SelectCalibration.MarkPoint.W = curpos.W; SelectCalibration.MarkPoint.Hand = curpos.Hand; SelectCalibration.MarkPoint.Local = curpos.Local; SelectCalibration.MarkPoint.Tool = curpos.Tool; _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = "成功!", Duration = 1 }); } catch (Exception ex) { LogHelper.WriteLogError("相机校准-示教中心点界面示教P0时出错!", ex); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = ex.Message, Duration = 1 }); } } #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; } } } }