Files

270 lines
12 KiB
C#
Raw Permalink Normal View History

using MainShell.AlgorithmCalib.Model;
using MainShell.AlgorithmCalib.Service;
using MainShell.Common;
using MainShell.Common.Display.ViewModel;
using MainShell.Hardware;
using Maxwell.SemiFramework.DefaultConfig.Vision;
using MaxwellFramework.Core.Interfaces;
using MwFramework.Controls.ControlCanvas.Model;
using MwFramework.ManagerService;
using SemiconductorVisionAlgorithm.SemiParams;
using Stylet;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using Point = SemiconductorVisionAlgorithm.SemiParams.Point;
namespace MainShell.AlgorithmCalib.ViewModel
{
public class CameraFusionPadCalibVerifyViewModel:Screen,IPage
{
public string Name { get; set; } = "CameraFusionPadCalibVerify";
public string CameraName { get; set; }
private readonly FusionCalibMotionService _fusionCalibMotionService;
private HardwareManager _hardware;
private CameraAxisViewModel _cameraAxisViewModelSevice = new CameraAxisViewModel();
public CameraAxisViewModel CameraAxisViewModelSevice
{
get { return _cameraAxisViewModelSevice; }
set
{
_cameraAxisViewModelSevice = value;
OnPropertyChanged(nameof(CameraAxisViewModelSevice));
}
}
private FusionCalibVerifyParItem _padfusionCalibVerifyParItem = new FusionCalibVerifyParItem();
public FusionCalibVerifyParItem PadfusionCalibVerifyParItem
{
get { return _padfusionCalibVerifyParItem; }
set
{
_padfusionCalibVerifyParItem = value;
OnPropertyChanged(nameof(PadfusionCalibVerifyParItem));
}
}
private bool _stopMotion = false;
public CameraFusionPadCalibVerifyViewModel(HardwareManager hardware, FusionCalibMotionService fusionCalibMotionService)
{
_hardware = hardware;
_fusionCalibMotionService = fusionCalibMotionService ?? throw new ArgumentNullException(nameof(fusionCalibMotionService));
}
public static CameraFusionPadCalibVerifyViewModel Create(string name, string cameraName, List<HardwareDevice> device, HardwareManager hardware, FusionCalibMotionService motion)
{
var vm = new CameraFusionPadCalibVerifyViewModel(hardware, motion);
vm.Initialize(name, device);
return vm;
}
private void Initialize(string cameraName, List<HardwareDevice> device)
{
CameraName = cameraName;
Name = cameraName;
var paramList = IoC.Get<IParameterManager>() as IParamList;
}
public void btnMovePadCalibPosPosition()
{
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
try
{
_fusionCalibMotionService.SafeMove(_hardware.Axis_X1, PadfusionCalibVerifyParItem.MoveAxisPos);
_fusionCalibMotionService.MoveWsAvoidance(PadfusionCalibVerifyParItem.ApproachXPos, PadfusionCalibVerifyParItem.ApproachYPos);
}
catch (Exception ex)
{
}
});
}
public void btnMoveToCenter()
{
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
try
{
if (ApproachPointPad(1))
{
PadfusionCalibVerifyParItem.StartX = _hardware.Axis_X2.State.ActualPos;
PadfusionCalibVerifyParItem.StartY = _hardware.Axis_Y1.State.ActualPos;
MwMessageBox.Show("中心对齐完成");
}
else
{
MwMessageBox.Show("逼近失败!");
}
}
catch (Exception ex)
{
}
});
}
public void btnMoveToStartPoint()
{
_fusionCalibMotionService.MovePhsAvoidance(PadfusionCalibVerifyParItem.StartX, PadfusionCalibVerifyParItem.StartY);
}
public void btnMovePad()
{
//PadfusionCalibVerifyParItem.VerifyRealPts = new List<Point>();
//List<Point> points = new List<Point>();
//System.Threading.Tasks.Task.Run(() =>
//{
// for (var i = 0; i < PadfusionCalibVerifyParItem.CountY; i++)
// {
// for (var j = 0; j < PadfusionCalibVerifyParItem.CountX; j++)
// {
// if (_stopMotion)
// {
// _stopMotion = false;
// return;
// }
// double yPos = PadfusionCalibVerifyParItem.StartY + i * PadfusionCalibVerifyParItem.Step;
// double xPos;
// if (i % 2 == 0)
// {
// xPos = PadfusionCalibVerifyParItem.StartX + j * PadfusionCalibVerifyParItem.Step;
// }
// else
// {
// xPos = PadfusionCalibVerifyParItem.StartX + (PadfusionCalibVerifyParItem.CountX - j - 1) * PadfusionCalibVerifyParItem.Step;
// }
// points.Add(new Point(xPos, yPos));
// _fusionCalibMotionService.MovePhsAvoidance(xPos, yPos);
// if (ApproachPointPad())
// {
// //WsfusionCalibVerifyParItem.ApproachXPos = _hardware.Axis_X2.State.ActualPos;
// //CameraWaferFusionCalibrationItem.WSVerityApproachXpos = _gs.Axis_X21.State.ActualPos;
// //CameraWaferFusionCalibrationItem.WSVerityApproachYpos = _gs.Axis_Y21.State.ActualPos;
// Point ruler = new Point(_hardware.Axis_X1.State.ActualPos, _hardware.Axis_Y2.State.ActualPos);
// Point real = _visionOperation.GetRealByRuler(_hardware.Camera_ExtendWS.Id, ruler);
// PadfusionCalibVerifyParItem.VerifyRealPts.Add(new Point(real.X, real.Y));
// }
// else
// {
// MwMessageBox.Show("逼近失败!");
// }
// }
// }
// MwMessageBox.Show("飞拍结束");
//});
}
public void btnVerifyPad()
{
//if (PadfusionCalibVerifyParItem.VerifyRealPts != null && PadfusionCalibVerifyParItem.VerifyRealPts.Count > 0)
//{
// var result = MwMessageBox.Show("是否已移动到Pad位置确认开始验证?", "确认开始", MessageBoxButton.YesNo, MessageBoxImage.Information);
// if (result == MessageBoxResult.Yes)
// {
// System.Threading.Tasks.Task.Factory.StartNew(() =>
// {
// List<SemiconductorVisionAlgorithm.SemiParams.Point> PadrulerThen = new List<SemiconductorVisionAlgorithm.SemiParams.Point>();
// List<SemiconductorVisionAlgorithm.SemiParams.Point> PadrulerNow = new List<SemiconductorVisionAlgorithm.SemiParams.Point>();
// Point padReal = _visionOperation.GetRealByRuler(_gs.Camera_Extend.Id, new Point(_gs.Axis_X11.State.ActualPos, _gs.Axis_Y11.State.ActualPos));
// for (var i = 0; i < PadfusionCalibVerifyParItem.VerifyRealPts.Count; i++)
// {
// if (_stopMotion)
// {
// _stopMotion = false;
// return;
// }
// SemiconductorVisionAlgorithm.SemiParams.Point rulerPoint = new SemiconductorVisionAlgorithm.SemiParams.Point();
// JM1Vision.JM1Manager.Instance.get_ws_pos(_gs.Camera_Extend.Id, _gs.Camera_ExtendWS.Id, new SemiconductorVisionAlgorithm.SemiParams.Point(padReal.X, padReal.Y), new SemiconductorVisionAlgorithm.SemiParams.Point(CameraWaferFusionCalibrationItem.VerityrealPointRealPoints[i].X, CameraWaferFusionCalibrationItem.VerityrealPointRealPoints[i].Y), out rulerPoint);
// PadrulerThen.Add(new SemiconductorVisionAlgorithm.SemiParams.Point(rulerPoint.X, rulerPoint.Y));
// _fusionCalibMotionService.MovePhsAvoidance(rulerPoint.X, rulerPoint.Y);
// //_safeAxisMotion.SafeMoveWS(rulerPoint.X, rulerPoint.Y, isCalib: true);
// if (ApproachPointPad())
// {
// PadrulerNow.Add(new SemiconductorVisionAlgorithm.SemiParams.Point(_hardware.Axis_X2.State.ActualPos, _hardware.Axis_Y1.State.ActualPos));
// }
// else
// {
// MwMessageBox.Show("逼近失败!");
// }
// }
// string filePath = System.AppDomain.CurrentDomain.BaseDirectory + @"CalibData";
// JM1Vision.JM1Manager.Instance.pos_verify(filePath, PadrulerThen, PadrulerNow);
// MwMessageBox.Show("验证完成!");
// });
// }
//}
//else
//{
// MwMessageBox.Show("请先执行飞拍!");
// return;
//}
}
public void btnStopVerifyPad()
{
try
{
var result = MwMessageBox.Show("是否停止?", "确认停止", MessageBoxButton.YesNo, MessageBoxImage.Information);
if (result == MessageBoxResult.Yes)
{
_stopMotion = true;
}
}
catch (Exception ex)
{
}
}
private bool ApproachPointPad(int approachTime = 10)
{
return false;
//string modelFileName = PadfusionCalibVerifyParItem.ModelPath;
//string path = System.AppDomain.CurrentDomain.BaseDirectory + modelFileName;
//Rectangle1 r = GetRectangle();
//VisionOperation visionOperation = IoC.Get<VisionOperation>();
////相机拍照
//return visionOperation.ApproachPointCircle(_hardware.Camera_ExtendWS, _hardware.Axis_X2, _hardware.Axis_Y1, path, r, out System.Windows.Point point, approachTime);
}
private Rectangle1 GetRectangle()
{
var region = CameraAxisViewModelSevice.Regions;
Rectangle rectangle = null;
Rectangle1 r = null;
if (region != null && region.Count > 0)
{
RectRegion rect = region[0].Region as RectRegion;
double start_x = rect.CenterPoint.X - rect.Width / 2;
double start_y = rect.CenterPoint.Y - rect.Height / 2;
double end_x = rect.CenterPoint.X + rect.Width / 2;
double end_y = rect.CenterPoint.Y + rect.Height / 2;
rectangle = new Rectangle(new System.Windows.Point(start_y, start_x), new System.Windows.Point(end_y, end_x));
r = new Rectangle1();
r.Start_X = rectangle.StartPoint.X;
r.Start_Y = rectangle.StartPoint.Y;
r.End_X = rectangle.EndPoint.X;
r.End_Y = rectangle.EndPoint.Y;
}
else
{
throw new Exception("请添加矩形!");
}
return r;
}
}
}