using Cognex.VisionPro; using Cognex.VisionPro.ToolBlock; using MaterialDesignThemes.Wpf; using NPOI.SS.Formula.Functions; 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.Collections.ObjectModel; using System.Linq; using System.Windows; using Team.FFFeederService.Interfaces; using TeamAAS_VP; using TeamAAS_VP.Controls; using TeamAAS_VP.Core; using TeamAAS_VP.Events; using TeamAAS_VP.Interfaces; using TeamAAS_VP.Models; using TeamAAS_VP.Models.Calibration; using TeamAAS_VP.Models.Robot; using TeamAAS_VP.Resources.Languages; using TeamAAS_VP.Services; namespace TeamAAS_VP.ViewModels.Calibration { public class CalibrationHomeViewModel : BindableBase, IConfirmNavigationRequest { IRegionManager _regionManager; IRegionNavigationService _regionNavigationService; IContainerProvider _container; IDialogService _dialogService; IEventAggregator _eventAggregator; IConfigService _configService; IFeederService _feederService; IRobotService _robotService; ICameraService _cameraService; ICalibrationService _calibrationService; ISystemDatabaseService _systemDatabaseService; #region 属性 private ObservableCollection _Robots; public ObservableCollection Robots { get { return _Robots; } set { SetProperty(ref _Robots, value); } } private ObservableCollection _Feeders; public ObservableCollection Feeders { get { return _Feeders; } set { SetProperty(ref _Feeders, value); } } private ObservableCollection _Calibrations; public ObservableCollection Calibrations { get { return _Calibrations; } set { SetProperty(ref _Calibrations, value); } } private CalibrationInfo _SelectCalibration; public CalibrationInfo SelectCalibration { get { return _SelectCalibration; } set { if (_SelectCalibration != null && _SelectCalibration.ToolBlock != null) { _SelectCalibration.ToolBlock.Dispose(); _SelectCalibration.ToolBlock = null; } SetProperty(ref _SelectCalibration, value); } } #endregion #region 命令 private DelegateCommand _LoadedCommand; public DelegateCommand LoadedCommand => _LoadedCommand ?? (_LoadedCommand = new DelegateCommand(ExecuteLoadedCommand)); private DelegateCommand _CreateCalibrationCommand; public DelegateCommand CreateCalibrationCommand => _CreateCalibrationCommand ?? (_CreateCalibrationCommand = new DelegateCommand(ExecuteCreateCalibrationCommand)); private DelegateCommand _StartCalibrationCommand; public DelegateCommand StartCalibrationCommand => _StartCalibrationCommand ?? (_StartCalibrationCommand = new DelegateCommand(ExecuteStartCalibrationCommand)); private DelegateCommand _RemoveCalibrationCommand; public DelegateCommand RemoveCalibrationCommand => _RemoveCalibrationCommand ?? (_RemoveCalibrationCommand = new DelegateCommand(ExecuteRemoveCalibrationCommand)); #endregion #region 事件 #endregion public CalibrationHomeViewModel(IRegionManager regionManager, IEventAggregator ea, IRegionNavigationService regionNavigationService, IContainerProvider container, IDialogService dialogService, IConfigService configService, IRobotService robotService, ICameraService cameraService, IFeederService feederService, ICalibrationService calibrationService, ISystemDatabaseService systemDatabaseService) { _regionManager = regionManager; _regionNavigationService = regionNavigationService; _container = container; _dialogService = dialogService; _eventAggregator = ea; _configService = configService; _robotService = robotService; _cameraService = cameraService; _feederService = feederService; _calibrationService = calibrationService; _systemDatabaseService = systemDatabaseService; } #region 方法 void ExecuteLoadedCommand() { if (_systemDatabaseService.GetCurrentUser().userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } } async void ExecuteCreateCalibrationCommand() { try { var view = new AddProduct() { Title = $"{Lang.创建校准}:", Item = "Name" }; //show the dialog var result = await DialogHost.Show(view, "RootDialog", null, null, null); if (result != null && !string.IsNullOrEmpty(result.ToString())) { if (!FileHelper.CheckFileName(result.ToString())) { _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.输入的名称不符合文件名命名规则, Duration = 1 }); return; } if (Calibrations.FirstOrDefault(p => p.Name == result.ToString()) != null) { _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = Lang.已存在同名校准, Duration = 1 }); return; } if (SelectCalibration != null && SelectCalibration.ToolBlock != null) { SelectCalibration.ToolBlock.Dispose(); SelectCalibration.ToolBlock = null; SelectCalibration = null; } SelectCalibration = new CalibrationInfo() { Id = Guid.NewGuid(), Name = result.ToString(), DateTime = DateTime.Now, CenterPoint = new RPoint(), HomePoint = new RPoint(), Pick = new PickInfo(), Tool = new RobotTool(), Arm = new RobotArm(), CalibPoints = new ObservableCollection(), Speed = 20, Accel = 20, Power = true, Width = 100, Height = 80, WaitBlow = 200, WaitPhoto = 200, WaitSuction = 200, IsCreate = true, ToolBlock = CogSerializer.LoadObjectFromFile(FilePath.CalibrationToolblockPath) as CogToolBlock, }; NavigationParameters param= new NavigationParameters(); param.Add("SelectCalibration", SelectCalibration); _regionManager.RequestNavigate("CalibrationRegionContext", "CalibrationBasics", param); } } catch (Exception ex) { LogHelper.WriteLogError("相机校准-Home界面创建校准时出错!", ex); MessageBox.Show(ex.Message); } } void ExecuteStartCalibrationCommand(CalibrationInfo calibration) { if (calibration == null) { return; } NavigationParameters param = new NavigationParameters(); param.Add("SelectCalibration", SelectCalibration); _regionManager.RequestNavigate("CalibrationRegionContext", "CalibrationBasics", param); } void ExecuteRemoveCalibrationCommand(CalibrationInfo calibration) { if (calibration == null) { return; } try { var calib = Calibrations.FirstOrDefault(x => x.Id == calibration.Id); Calibrations.Remove(calibration); _calibrationService.RemoveCalibration(calib.Id); } catch (Exception ex) { _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = ex.Message, Duration = 1 }); LogHelper.WriteLogError("移除校准时出错!", ex); } } #endregion #region 继承 /// /// 确认导航请求时调用。此方法允许您在导航之前执行一些操作。 /// /// /// public void ConfirmNavigationRequest(NavigationContext navigationContext, Action continuationCallback) { continuationCallback(true); } /// /// 接收导航请求时调用。传入导航参数,包含有关导航目标的信息。 /// /// /// public async void OnNavigatedTo(NavigationContext navigationContext) { Robots = new ObservableCollection(); var robots = _configService.GetAllRobots(); foreach (var item in robots) { Robots.Add(item); } Feeders = new ObservableCollection(); var feeders = _configService.GetAllFeeders(); foreach (var item in feeders) { Feeders.Add(item); } Calibrations = new ObservableCollection(); var calibs = _calibrationService.GetAllCalibrations(); foreach (var item in calibs) { Calibrations.Add(item); } try { //SelectCalibration = _container.Resolve().SelectCalibration; if (SelectCalibration != null) { if (SelectCalibration.RobotId != Guid.Empty) { IRobot Robot = _robotService.GetRobot(SelectCalibration.RobotId); Robot.EnterDebugMode = false; } } } catch (Exception) { } } /// /// 是否允许导航到此视图模型。 /// /// /// public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } /// /// 导航离开此视图模型时调用。您可以在此处执行清理操作或保存状态。 /// /// public void OnNavigatedFrom(NavigationContext navigationContext) { } #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; } } } }