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 TeamAAS_VP.Events; using TeamAAS_VP.Core; using TeamAAS_VP.Interfaces; using TeamAAS_VP.Models; using TeamAAS_VP; using System.Windows.Media.Media3D; using Cognex.VisionPro.ToolBlock; using System.Web.Hosting; using Team.FFFeederService; using System.Windows; using TeamAAS_VP.Resources.Languages; namespace TeamAAS_VP.ViewModels.Product { public class AdvancedProcedureViewModel : BindableBase { IRegionManager _regionManager; IEventAggregator _eventAggregator; IContainerProvider _container; IDialogService _dialogService; ProductsViewModel productsViewModel; #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); } } public CogToolBlockEditV2 ToolBlockEdit { get;set; } private IRobot _Robot; public IRobot Robot { get { return _Robot; } set { SetProperty(ref _Robot, value); } } private ICamera _Camera; public ICamera Camera { get { return _Camera; } set { SetProperty(ref _Camera, value); } } private string _Message; public string Message { get { return _Message; } set { SetProperty(ref _Message, 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 _RunVisionProcessCommand; public DelegateCommand RunVisionProcessCommand => _RunVisionProcessCommand ?? (_RunVisionProcessCommand = new DelegateCommand(ExecuteRunVisionProcessCommand)); #endregion #region 事件 #endregion public AdvancedProcedureViewModel(IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, IDialogService dialogService) { _regionManager = regionManager; _eventAggregator = ea; _container = container; _dialogService = dialogService; //订阅权限登录事件 _eventAggregator.GetEvent().Subscribe(LoginChange); productsViewModel = _container.Resolve(); SelectProduct = productsViewModel.SelectProduct; SelectProcedure = _container.Resolve().SelectProcedure; } #region 方法 /// /// 下一步 /// void ExecuteNextCommand() { try { SelectProcedure.ToolBlock = ToolBlockEdit.Subject; if (SelectProcedure.FeederId == Guid.Empty) { _regionManager.RequestNavigate("ProductRegionContext", "ProcedureVisionOutput"); } else { var management = _container.Resolve(); var feederService = management.FeederService; var Feeder = feederService.GetFeeder(SelectProcedure.FeederId); if (Feeder.FeederBrand == FeederBrand.AFAG) { _regionManager.RequestNavigate("ProductRegionContext", "AfagFeederParams"); } else { _regionManager.RequestNavigate("ProductRegionContext", "FeederParams"); } } } catch (Exception ex) { LogHelper.WriteLogError(ex.Message,ex); } } /// /// 上一步 /// void ExecuteBackCommand() { try { _regionManager.RequestNavigate("ProductRegionContext", "CameraParams"); } catch (Exception ex) { LogHelper.WriteLogError(ex.Message, ex); } } void ExecuteLoadedCommand() { if (_container.Resolve().CurrentUser.userPart== Enums.UserPart.Operator) { IsAllowEdit = false; } else { IsAllowEdit = true; } try { productsViewModel = _container.Resolve(); SelectProduct = productsViewModel.SelectProduct; SelectProcedure = _container.Resolve().SelectProcedure; if (SelectProcedure.RobotId != Guid.Empty) { Robot = _container.Resolve().RobotService.GetRobot(SelectProcedure.RobotId); } Camera = _container.Resolve().CameraService.GetCamera(SelectProcedure.CameraId); ToolBlockEdit.Subject = SelectProcedure.ToolBlock; } catch (Exception ex) { LogHelper.WriteLogError("高级视觉处理界面出错", ex); } } void ExecuteRunVisionProcessCommand() { try { SelectProcedure.ToolBlock = ToolBlockEdit.Subject; var image= Camera.Grab(); if (image != null) { ToolBlockEdit.Subject.Inputs["InputImage"].Value = image; ToolBlockEdit.Subject.Run(); Message = $"{Lang.图像采集耗时}:{Camera.TotalTime.TotalMilliseconds.ToString("F2")} ms {Lang.工具运行耗时}:{ToolBlockEdit.Subject.RunStatus.TotalTime.ToString("F2")} ms"; } else { Message=Lang.图像采集失败耗时.Replace("{0}", Camera.TotalTime.TotalMilliseconds.ToString("F2")).Replace("{1}", Camera.ErrorMessage); } } catch (Exception ex) { LogHelper.WriteLogError("高级模式-运行流程时出错时出错", 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; } } } }