using MainShell.AlgorithmCalib.Model; using MainShell.AlgorithmCalib.Service; using MainShell.Common; using MainShell.Common.Display.ViewModel; using MainShell.Filewritable; using MainShell.Hardware; using Maxwell.SemiFramework.WaferCalibration.ViewModel; using MaxwellFramework.Core.Interfaces; using MwFramework.Controls.SystemCalib; using MwFramework.Controls.UIControl; using MwFramework.ManagerService; using Stylet; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using CameraAxisViewModel = MainShell.Common.Display.ViewModel.CameraAxisViewModel; namespace MainShell.AlgorithmCalib.ViewModel { public class CameraFusionPadCalibViewModel:Screen,IPage { private bool _stopMotion = false; public string Name { get; set; } = "CameraFusionPadCalib"; public string CameraName { get; set; } private readonly FusionCalibMotionService _fusionCalibMotionService; private HardwareManager _hardware; private string _fileSaveDir = Paths.CalibSettingPath; public string FileSaveDir { get { return _fileSaveDir; } set { SetAndNotify(ref _fileSaveDir, value); } } private CameraAxisViewModel _cameraAxisViewModelSevice; public CameraAxisViewModel CameraAxisViewModelSevice { get { return _cameraAxisViewModelSevice; } set { _cameraAxisViewModelSevice = value; OnPropertyChanged(nameof(CameraAxisViewModelSevice)); } } private FusionCalibParItem _fusionCalibParItem = new FusionCalibParItem(); public FusionCalibParItem FusionCalibParItem { get { return _fusionCalibParItem; } set { _fusionCalibParItem = value; OnPropertyChanged(nameof(FusionCalibParItem)); } } private FusionCalibParItem _inputParam; public FusionCalibParItem InputParam { get { return _inputParam; } set { SetAndNotify(ref _inputParam, value); } } private FusionCalibParItem _resultParam; public FusionCalibParItem ResultParam { get { return _resultParam; } set { SetAndNotify(ref _resultParam, value); } } //private CameraFusionPadCalibViewModel _service; //public CameraFusionPadCalibViewModel Service //{ // get { return _service; } // set // { // _service = value; // NotifyOfPropertyChange(); // } //} private bool _isInitialized=false; public CameraFusionPadCalibViewModel() { } public CameraFusionPadCalibViewModel(HardwareManager hardware, FusionCalibMotionService fusionCalibMotionService) { _hardware = hardware; _fusionCalibMotionService = fusionCalibMotionService ?? throw new ArgumentNullException(nameof(fusionCalibMotionService)); } /// /// 弹窗专用工厂方法(新增):传入标定参数 /// public static CameraFusionPadCalibViewModel Create( string cameraName, string fileSaveName, List device, FusionCalibParItem param, HardwareManager hardware, FusionCalibMotionService fusionCalibMotionService) { var vm = new CameraFusionPadCalibViewModel(hardware,fusionCalibMotionService); vm.InputParam = param; vm.ResultParam = param; vm.Initialize(cameraName, fileSaveName, device, true); return vm; } public void viewLoad() { base.OnViewLoaded(); if (_isInitialized) { return; } if (_hardware != null) { _cameraAxisViewModelSevice = new CameraAxisViewModel(); _cameraAxisViewModelSevice.CameraAxisDevices.HardwareDeviceList = _hardware.CameraAxisManager.TopPositionCameraAxisDevices; NotifyOfPropertyChange(nameof(CameraAxisViewModelSevice)); } //RebuildModuleViewModels(); _isInitialized = true; } public void viewUnLoad() { ResultParam = FusionCalibParItem; } private void Initialize(string cameraName, string fileSaveName, List device, bool isSignUp) { //if (isSignUp) //{ // IoC.Get().Unsubscribe(this); // IoC.Get().Subscribe(this); //} //CameraName = cameraName; Name = cameraName; //FileSaveName = fileSaveName; var paramList = IoC.Get() as IParamList; //Service = new CameraFusionPadCalibViewModel(); FusionCalibParItem = InputParam; //string pathSavePath = Path.Combine(FileSaveDir, FileSaveName + ".xml"); //Service.SetParaSavePath(pathSavePath); //Service.IsShowSolidLine = true; //Service.ShapeThickness = 1; //Service.DrawInConcurrency = false; //Service.IsAxisControlLDBVisible = Visibility.Visible; } public void btnMovePhsCalibPosPosition() { System.Threading.Tasks.Task.Factory.StartNew(() => { try { _fusionCalibMotionService.SafeMove(_hardware.Axis_Y1, FusionCalibParItem.MoveAxisPos); _fusionCalibMotionService.MovePhsAvoidance(FusionCalibParItem.ApproachXPos, FusionCalibParItem.ApproachYPos); } catch (Exception ex) { } }); } public void btnApproachPhsCalibPosition() { System.Threading.Tasks.Task.Factory.StartNew(() => { try { //if (FindPointWSCircle()) //{ FusionCalibParItem.ApproachXPos = _hardware.Axis_X1.State.ActualPos; FusionCalibParItem.ApproachYPos = _hardware.Axis_Y2.State.ActualPos; //CameraWaferFusionCalibrationItem.CenterX = _gs.Axis_X21.State.ActualPos; //CameraWaferFusionCalibrationItem.CenterY = _gs.Axis_Y21.State.ActualPos; MessageBox.Show($"对齐值,X1:{FusionCalibParItem.ApproachXPos},Y2:{FusionCalibParItem.ApproachYPos}"); //} //else //{ // MessageBox.Show("对齐失败!"); //} } catch (Exception ex) { } }); } public void btnCalculateCameraPosition() { try { //起点覆盖标定范围,起点往负方向6mm int offset = -10; double Y2MinPos = 0; _hardware.Axis_Y2.GetSoftMel(ref Y2MinPos); var delx = FusionCalibParItem.ApproachYPos - Y2MinPos + offset; FusionCalibParItem.CameraAxisPos = FusionCalibParItem.MoveAxisPos - delx; } catch (Exception ex) { } } public void btnSetCameraPosition() { var result = MwMessageBox.Show("是否使用当前位置?", "确认", MessageBoxButton.YesNo, MessageBoxImage.Information); if (result == MessageBoxResult.Yes) { try { FusionCalibParItem.CameraAxisPos = _hardware.Axis_Y1.State.ActualPos; } catch (Exception ex) { } } } public void btnMoveCameraPosition() { var result = MwMessageBox.Show("是否移动到该点?", "确认", MessageBoxButton.YesNo, MessageBoxImage.Information); if (result == MessageBoxResult.Yes) { System.Threading.Tasks.Task.Factory.StartNew(() => { try { _fusionCalibMotionService.SafeMove(_hardware.Axis_Y1, FusionCalibParItem.CameraAxisPos); } catch (Exception ex) { } }); } } public void btnCalculatePhsPosition() { try { //起点覆盖标定范围,起点往负方向6mm int offset = -10; double Y2MinPos = 0; _hardware.Axis_Y2.GetSoftMel(ref Y2MinPos); var delx = FusionCalibParItem.ApproachXPos - Y2MinPos + offset; FusionCalibParItem.CameraAxisPos = FusionCalibParItem.MoveAxisPos - delx; double y11Offset = FusionCalibParItem.CameraAxisPos - FusionCalibParItem.MoveAxisPos; FusionCalibParItem.StartX = FusionCalibParItem.ApproachXPos; FusionCalibParItem.StartY = FusionCalibParItem.ApproachYPos + y11Offset; } catch (Exception ex) { } } public void btnSetStageStartPosition() { var result = MwMessageBox.Show("是否使用当前位置?", "确认", MessageBoxButton.YesNo, MessageBoxImage.Information); if (result == MessageBoxResult.Yes) { System.Threading.Tasks.Task.Factory.StartNew(() => { try { FusionCalibParItem.StartX = _hardware.Axis_X1.State.ActualPos; FusionCalibParItem.StartY = _hardware.Axis_Y2.State.ActualPos; } catch (Exception ex) { } }); } } public void btnMoveStageStartPosition() { var result = MwMessageBox.Show("是否移动到该点?", "确认", MessageBoxButton.YesNo, MessageBoxImage.Information); if (result == MessageBoxResult.Yes) { try { _fusionCalibMotionService.MovePhsAvoidance(FusionCalibParItem.StartX, FusionCalibParItem.StartY); } catch (Exception ex) { } } } public void btnMoveToCenter() { System.Threading.Tasks.Task.Factory.StartNew(() => { try { //if (ApproachPointWS(1)) //{ // CameraWaferFusionCalibrationItem.WaferStartVerifyX = _gs.Axis_X21.State.ActualPos; // CameraWaferFusionCalibrationItem.WaferStartVerifyY = _gs.Axis_Y21.State.ActualPos; // MwMessageBox.Show("中心对齐完成"); //} //else //{ // MwMessageBox.Show("逼近失败!"); //} } catch (Exception ex) { } }); } public void btnStart() { } public void btnStop() { } } }