using MathNet.Numerics.LinearAlgebra;
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.Linq;
using System.Threading.Tasks;
using System.Windows;
using Team.FFFeederService;
using Team.FFFeederService.Interfaces;
using TeamAAS_VP.Events;
using TeamAAS_VP.Core;
using TeamAAS_VP.Interfaces;
using TeamAAS_VP.Models;
using TeamAAS_VP.ViewModels.Calibration;
using TeamAAS_VP;
using Cognex.VisionPro.Blob;
namespace TeamAAS_VP.ViewModels.Product
{
public class FeederBlobParamsViewModel : BindableBase, IDialogAware
{
IRegionManager _regionManager;
IRegionNavigationService _regionNavigationService;
IContainerProvider _container;
IDialogService _dialogService;
IEventAggregator _eventAggregator;
#region 属性
private CogBlobEditV2 _BlobEditV2;
///
/// Blob工具
///
public CogBlobEditV2 BlobEditV2
{
get { return _BlobEditV2; }
set { SetProperty(ref _BlobEditV2, value); }
}
private double _MinArea;
public double MinArea
{
get { return _MinArea; }
set { SetProperty(ref _MinArea,value); }
}
private double _BlobTotalArea;
public double BlobTotalArea
{
get { return _BlobTotalArea; }
set { SetProperty(ref _BlobTotalArea,value); }
}
private ProcedureModel _SelectProcedure;
///
/// 选中的流程
///
public ProcedureModel SelectProcedure
{
get { return _SelectProcedure; }
set { SetProperty(ref _SelectProcedure, value); }
}
private ICamera _Camera;
public ICamera Camera
{
get { return _Camera; }
set { SetProperty(ref _Camera, value); }
}
public string Title => "供料时机设置";
public Management management { get; set; }
public IVoiceCoilMotorFeeder Feeder { get; set; }
#endregion
#region 命令
private DelegateCommand _ConfirmCommand;
public DelegateCommand ConfirmCommand =>
_ConfirmCommand ?? (_ConfirmCommand = new DelegateCommand(ExecuteConfirmCommand));
private DelegateCommand _CancelCommand;
public DelegateCommand CancelCommand =>
_CancelCommand ?? (_CancelCommand = new DelegateCommand(ExecuteCancelCommand));
private DelegateCommand _RunBlobToolCommand;
public DelegateCommand RunBlobToolCommand =>
_RunBlobToolCommand ?? (_RunBlobToolCommand = new DelegateCommand(ExecuteRunBlobToolCommand));
private DelegateCommand _SetCurrnetAreaCommand;
public DelegateCommand SetCurrnetAreaCommand =>
_SetCurrnetAreaCommand ?? (_SetCurrnetAreaCommand = new DelegateCommand(ExecuteSetCurrnetAreaCommand));
#endregion
#region 事件
public event Action RequestClose;
#endregion
public FeederBlobParamsViewModel(IRegionManager regionManager, IEventAggregator ea, IRegionNavigationService regionNavigationService, IContainerProvider container, IDialogService dialogService)
{
_regionManager = regionManager;
_regionNavigationService = regionNavigationService;
_container = container;
_dialogService = dialogService;
_eventAggregator = ea;
//订阅权限登录事件
_eventAggregator.GetEvent().Subscribe(LoginChange);
}
#region 方法
///
/// 确定
///
void ExecuteConfirmCommand()
{
IDialogParameters parameters = new DialogParameters();
parameters.Add("MinArea", MinArea);
RequestClose?.Invoke(new DialogResult(ButtonResult.OK, parameters));
}
///
/// 取消
///
void ExecuteCancelCommand()
{
IDialogParameters parameters = new DialogParameters();
parameters.Add("MinArea", 0);
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel, parameters));
}
///
/// 运行工具
///
void ExecuteRunBlobToolCommand()
{
try
{
if (SelectProcedure.ToolBlock != null)
{
SelectProcedure.ToolBlock.Inputs["InputImage"].Value = Camera.Grab();
SelectProcedure.ToolBlock.Run();
var blobtool = SelectProcedure.ToolBlock.Tools["CogBlobTool1"] as CogBlobTool;
blobtool.Run();
double totalarea = 0;
if (blobtool.Results!=null)
{
foreach (CogBlobResult item in blobtool.Results.GetBlobs())
{
totalarea += item.Area;
}
}
BlobTotalArea = totalarea;
}
}
catch (Exception ex)
{
LogHelper.WriteLogError("运行视觉Blob工具时出错!", ex);
MessageBox.Show(ex.Message);
}
}
void ExecuteSetCurrnetAreaCommand()
{
MinArea = BlobTotalArea;
}
public bool CanCloseDialog()
{
return true;
}
public void OnDialogClosed()
{
}
public void OnDialogOpened(IDialogParameters parameters)
{
try
{
management = _container.Resolve();
SelectProcedure = _container.Resolve().SelectProcedure;
MinArea=SelectProcedure.MinArea;
Feeder = management.FeederService.GetFeeder(SelectProcedure.FeederId);
Camera = _container.Resolve().CameraService.GetCamera(SelectProcedure.CameraId);
BlobEditV2.Subject = SelectProcedure.ToolBlock.Tools["CogBlobTool1"] as CogBlobTool;
}
catch (Exception ex)
{
LogHelper.WriteLogError("Feeder Blob界面出错!", ex);
MessageBox.Show(ex.Message);
}
}
#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;
}
}
}
}