FeederBlobParamsViewModel.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. using MathNet.Numerics.LinearAlgebra;
  2. using Prism.Commands;
  3. using Prism.Events;
  4. using Prism.Ioc;
  5. using Prism.Mvvm;
  6. using Prism.Regions;
  7. using Prism.Services.Dialogs;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Threading.Tasks;
  12. using System.Windows;
  13. using Team.FFFeederService;
  14. using Team.FFFeederService.Interfaces;
  15. using TeamAAS_VP.Events;
  16. using TeamAAS_VP.Core;
  17. using TeamAAS_VP.Interfaces;
  18. using TeamAAS_VP.Models;
  19. using TeamAAS_VP.ViewModels.Calibration;
  20. using TeamAAS_VP;
  21. using Cognex.VisionPro.Blob;
  22. namespace TeamAAS_VP.ViewModels.Product
  23. {
  24. public class FeederBlobParamsViewModel : BindableBase, IDialogAware
  25. {
  26. IRegionManager _regionManager;
  27. IRegionNavigationService _regionNavigationService;
  28. IContainerProvider _container;
  29. IDialogService _dialogService;
  30. IEventAggregator _eventAggregator;
  31. #region 属性
  32. private CogBlobEditV2 _BlobEditV2;
  33. /// <summary>
  34. /// Blob工具
  35. /// </summary>
  36. public CogBlobEditV2 BlobEditV2
  37. {
  38. get { return _BlobEditV2; }
  39. set { SetProperty(ref _BlobEditV2, value); }
  40. }
  41. private double _MinArea;
  42. public double MinArea
  43. {
  44. get { return _MinArea; }
  45. set { SetProperty(ref _MinArea,value); }
  46. }
  47. private double _BlobTotalArea;
  48. public double BlobTotalArea
  49. {
  50. get { return _BlobTotalArea; }
  51. set { SetProperty(ref _BlobTotalArea,value); }
  52. }
  53. private ProcedureModel _SelectProcedure;
  54. /// <summary>
  55. /// 选中的流程
  56. /// </summary>
  57. public ProcedureModel SelectProcedure
  58. {
  59. get { return _SelectProcedure; }
  60. set { SetProperty(ref _SelectProcedure, value); }
  61. }
  62. private ICamera _Camera;
  63. public ICamera Camera
  64. {
  65. get { return _Camera; }
  66. set { SetProperty(ref _Camera, value); }
  67. }
  68. public string Title => "供料时机设置";
  69. public Management management { get; set; }
  70. public IVoiceCoilMotorFeeder Feeder { get; set; }
  71. #endregion
  72. #region 命令
  73. private DelegateCommand _ConfirmCommand;
  74. public DelegateCommand ConfirmCommand =>
  75. _ConfirmCommand ?? (_ConfirmCommand = new DelegateCommand(ExecuteConfirmCommand));
  76. private DelegateCommand _CancelCommand;
  77. public DelegateCommand CancelCommand =>
  78. _CancelCommand ?? (_CancelCommand = new DelegateCommand(ExecuteCancelCommand));
  79. private DelegateCommand _RunBlobToolCommand;
  80. public DelegateCommand RunBlobToolCommand =>
  81. _RunBlobToolCommand ?? (_RunBlobToolCommand = new DelegateCommand(ExecuteRunBlobToolCommand));
  82. private DelegateCommand _SetCurrnetAreaCommand;
  83. public DelegateCommand SetCurrnetAreaCommand =>
  84. _SetCurrnetAreaCommand ?? (_SetCurrnetAreaCommand = new DelegateCommand(ExecuteSetCurrnetAreaCommand));
  85. #endregion
  86. #region 事件
  87. public event Action<IDialogResult> RequestClose;
  88. #endregion
  89. public FeederBlobParamsViewModel(IRegionManager regionManager, IEventAggregator ea, IRegionNavigationService regionNavigationService, IContainerProvider container, IDialogService dialogService)
  90. {
  91. _regionManager = regionManager;
  92. _regionNavigationService = regionNavigationService;
  93. _container = container;
  94. _dialogService = dialogService;
  95. _eventAggregator = ea;
  96. //订阅权限登录事件
  97. _eventAggregator.GetEvent<UserLoginNotification>().Subscribe(LoginChange);
  98. }
  99. #region 方法
  100. /// <summary>
  101. /// 确定
  102. /// </summary>
  103. void ExecuteConfirmCommand()
  104. {
  105. IDialogParameters parameters = new DialogParameters();
  106. parameters.Add("MinArea", MinArea);
  107. RequestClose?.Invoke(new DialogResult(ButtonResult.OK, parameters));
  108. }
  109. /// <summary>
  110. /// 取消
  111. /// </summary>
  112. void ExecuteCancelCommand()
  113. {
  114. IDialogParameters parameters = new DialogParameters();
  115. parameters.Add("MinArea", 0);
  116. RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel, parameters));
  117. }
  118. /// <summary>
  119. /// 运行工具
  120. /// </summary>
  121. void ExecuteRunBlobToolCommand()
  122. {
  123. try
  124. {
  125. if (SelectProcedure.ToolBlock != null)
  126. {
  127. SelectProcedure.ToolBlock.Inputs["InputImage"].Value = Camera.Grab();
  128. SelectProcedure.ToolBlock.Run();
  129. var blobtool = SelectProcedure.ToolBlock.Tools["CogBlobTool1"] as CogBlobTool;
  130. blobtool.Run();
  131. double totalarea = 0;
  132. if (blobtool.Results!=null)
  133. {
  134. foreach (CogBlobResult item in blobtool.Results.GetBlobs())
  135. {
  136. totalarea += item.Area;
  137. }
  138. }
  139. BlobTotalArea = totalarea;
  140. }
  141. }
  142. catch (Exception ex)
  143. {
  144. LogHelper.WriteLogError("运行视觉Blob工具时出错!", ex);
  145. MessageBox.Show(ex.Message);
  146. }
  147. }
  148. void ExecuteSetCurrnetAreaCommand()
  149. {
  150. MinArea = BlobTotalArea;
  151. }
  152. public bool CanCloseDialog()
  153. {
  154. return true;
  155. }
  156. public void OnDialogClosed()
  157. {
  158. }
  159. public void OnDialogOpened(IDialogParameters parameters)
  160. {
  161. try
  162. {
  163. management = _container.Resolve<Management>();
  164. SelectProcedure = _container.Resolve<ProcessBasicsViewModel>().SelectProcedure;
  165. MinArea=SelectProcedure.MinArea;
  166. Feeder = management.FeederService.GetFeeder(SelectProcedure.FeederId);
  167. Camera = _container.Resolve<Management>().CameraService.GetCamera(SelectProcedure.CameraId);
  168. BlobEditV2.Subject = SelectProcedure.ToolBlock.Tools["CogBlobTool1"] as CogBlobTool;
  169. }
  170. catch (Exception ex)
  171. {
  172. LogHelper.WriteLogError("Feeder Blob界面出错!", ex);
  173. MessageBox.Show(ex.Message);
  174. }
  175. }
  176. #endregion
  177. private bool _IsAllowEdit = false;
  178. public bool IsAllowEdit
  179. {
  180. get { return _IsAllowEdit; }
  181. set { SetProperty(ref _IsAllowEdit, value); }
  182. }
  183. private void LoginChange(Models.User user)
  184. {
  185. if (user.userPart == Enums.UserPart.Operator)
  186. {
  187. IsAllowEdit = false;
  188. }
  189. else
  190. {
  191. IsAllowEdit = true;
  192. }
  193. }
  194. }
  195. }