using Cognex.VisionPro.PMAlign; 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.Collections.ObjectModel; using System.Linq; using System.Windows; using Team.FFFeederService; using Team.FFFeederService.Interfaces; using TeamAAS_VP; using TeamAAS_VP.Core; using TeamAAS_VP.Events; using TeamAAS_VP.Interfaces; using TeamAAS_VP.Models; using TeamAAS_VP.Services; using TeamAAS_VP.Views.Product; namespace TeamAAS_VP.ViewModels.Product { public class SimpleProcedureViewModel : BindableBase, IConfirmNavigationRequest { IRegionManager _regionManager; IEventAggregator _eventAggregator; IContainerProvider _container; IDialogService _dialogService; ICameraService _cameraService; IFeederService _feederService; ISystemDatabaseService _systemDatabaseService; #region 属性 private ProductModel _SelectProduct; /// /// 选中的产品 /// public ProductModel SelectProduct { get { return _SelectProduct; } set { SetProperty(ref _SelectProduct, value); } } private ProcedureModel _SelectProcedure; /// /// 选中的流程 /// public ProcedureModel SelectProcedure { get { return _SelectProcedure; } set { SetProperty(ref _SelectProcedure, value); } } private CogPMAlignEditV2 _PMAlignEditV2; /// /// 模板匹配工具 /// public CogPMAlignEditV2 PMAlignEditV2 { get { return _PMAlignEditV2; } set { SetProperty(ref _PMAlignEditV2, value); } } private ICamera _Camera; public ICamera Camera { get { return _Camera; } set { SetProperty(ref _Camera, value); } } #endregion #region 命令 private DelegateCommand _NextCommand; public DelegateCommand NextCommand => _NextCommand ?? (_NextCommand = new DelegateCommand(ExecuteNextCommand)); private DelegateCommand _BackCommand; public DelegateCommand BackCommand => _BackCommand ?? (_BackCommand = new DelegateCommand(ExecuteBackCommand)); private DelegateCommand _LoadedCommand; public DelegateCommand LoadedCommand => _LoadedCommand ?? (_LoadedCommand = new DelegateCommand(ExecuteLoadedCommand)); private DelegateCommand _RunProcedureCommand; public DelegateCommand RunProcedureCommand => _RunProcedureCommand ?? (_RunProcedureCommand = new DelegateCommand(ExecuteRunProcedureCommand)); #endregion #region 事件 #endregion public SimpleProcedureViewModel(IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, IDialogService dialogService, ICameraService cameraService,IFeederService feederService,ISystemDatabaseService systemDatabaseService) { _regionManager = regionManager; _eventAggregator = ea; _container = container; _dialogService = dialogService; _cameraService = cameraService; _feederService = feederService; _systemDatabaseService = systemDatabaseService; //订阅权限登录事件 _eventAggregator.GetEvent().Subscribe(LoginChange); } #region 方法 /// /// 下一步 /// void ExecuteNextCommand() { if (SelectProcedure.FeederId==Guid.Empty) { _regionManager.RequestNavigate("ProductRegionContext", "ProcedureVisionOutput"); } else { var management = _container.Resolve(); var feederService = _feederService; var Feeder = feederService.GetFeeder(SelectProcedure.FeederId); NavigationParameters param = new NavigationParameters(); param.Add("SelectProduct", SelectProduct); param.Add("SelectedProcedure", SelectProcedure); if (Feeder.FeederBrand == FeederBrand.AFAG) { _regionManager.RequestNavigate("ProductRegionContext", "AfagFeederParams",param); } else { _regionManager.RequestNavigate("ProductRegionContext", "FeederParams",param); } } } /// /// 上一步 /// void ExecuteBackCommand() { NavigationParameters param = new NavigationParameters(); param.Add("SelectProduct", SelectProduct); param.Add("SelectedProcedure", SelectProcedure); _regionManager.RequestNavigate("ProductRegionContext", "CameraParams", param); } void ExecuteLoadedCommand() { if (_systemDatabaseService.GetCurrentUser().userPart == Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } } void ExecuteRunProcedureCommand() { try { SelectProcedure.ToolBlock.Inputs["InputImage"].Value = Camera.Grab(); SelectProcedure.ToolBlock.Run(); } catch (Exception ex) { LogHelper.WriteLogError("简单模式-运行流程时出错时出错", ex); _eventAggregator.GetEvent().Publish(new MessageParameter() { Msg = ex.Message, Duration = 1 }); } } #endregion #region 继承 /// /// 确认导航请求时调用。此方法允许您在导航之前执行一些操作。 /// /// /// public void ConfirmNavigationRequest(NavigationContext navigationContext, Action continuationCallback) { continuationCallback(true); } /// /// 接收导航请求时调用。传入导航参数,包含有关导航目标的信息。 /// /// /// public async void OnNavigatedTo(NavigationContext navigationContext) { try { SelectProduct = navigationContext.Parameters.GetValue("SelectProduct"); SelectProcedure = navigationContext.Parameters.GetValue("SelectedProcedure"); foreach (var item in SelectProcedure.ToolBlock.Tools) { if (item is CogPMAlignTool) { PMAlignEditV2.Subject = item as CogPMAlignTool; } } Camera = _cameraService.GetCamera(SelectProcedure.CameraId); } catch (Exception ex) { LogHelper.WriteLogError("简单视觉流程界面进入时出错!", ex); } } /// /// 是否允许导航到此视图模型。 /// /// /// 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; } } } }