|
|
|
@@ -1,4 +1,5 @@ |
|
|
|
using MaiMuAOI.ImageProcessing;
|
|
|
|
using CalTools;
|
|
|
|
using MaiMuAOI.ImageProcessing;
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
using OpenCvSharp;
|
|
|
|
using ProductionControl.UIExtend;
|
|
|
|
@@ -609,6 +610,184 @@ namespace DefectInferTool |
|
|
|
return;
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 标定
|
|
|
|
/// <summary>
|
|
|
|
/// 选择文件
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="filter">如 图像文件|*.jpg|图像文件|*.png|所有文件|*.*</param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public static string SelectFile(string filter = "所有文件|*.*", string defaultPath = "")
|
|
|
|
{
|
|
|
|
OpenFileDialog fie = new OpenFileDialog();
|
|
|
|
fie.Title = "选择文件";
|
|
|
|
//fie.InitialDirectory = (defaultPath != "" ? defaultPath : Path.GetFullPath("."));
|
|
|
|
fie.Filter = filter; //设置文件类型
|
|
|
|
if (fie.ShowDialog() == DialogResult.OK)
|
|
|
|
return fie.FileName;
|
|
|
|
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
|
|
|
|
private void tbTZPath_Click(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
TextBox tb = (TextBox)sender;
|
|
|
|
string path = SelectFile("所有文件|*.*", Application.StartupPath);
|
|
|
|
if (!string.IsNullOrWhiteSpace(path))
|
|
|
|
{
|
|
|
|
tb.Text = path;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 选择目录
|
|
|
|
/// </summary>
|
|
|
|
/// <returns></returns>
|
|
|
|
public static string SelectFolder(string defaultPath = "")
|
|
|
|
{
|
|
|
|
FolderBrowserDialog dlg = new FolderBrowserDialog();
|
|
|
|
dlg.SelectedPath = (defaultPath != "" ? defaultPath : Path.GetFullPath("."));
|
|
|
|
if (dlg.ShowDialog() == DialogResult.OK)
|
|
|
|
return dlg.SelectedPath;
|
|
|
|
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
private void tbSFPath_Click(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
TextBox tb = (TextBox)sender;
|
|
|
|
string path = SelectFolder(Application.StartupPath);
|
|
|
|
if (!string.IsNullOrWhiteSpace(path))
|
|
|
|
{
|
|
|
|
tb.Text = path;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void btnMarkCal_Click(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
CalToolsClass calToolsClass = new CalToolsClass();
|
|
|
|
double[] sizeX = new double[4];
|
|
|
|
double[] sizeY = new double[4];
|
|
|
|
double[] defectX = new double[4];
|
|
|
|
double[] defectY = new double[4];
|
|
|
|
double zpos = (double)ZPos.Value;
|
|
|
|
|
|
|
|
sizeX[0] = (double)markX1.Value;
|
|
|
|
sizeX[1] = (double)markX2.Value;
|
|
|
|
sizeX[2] = (double)markX3.Value;
|
|
|
|
sizeX[3] = (double)markX4.Value;
|
|
|
|
|
|
|
|
sizeY[0] = (double)MarkY1.Value;
|
|
|
|
sizeY[1] = (double)MarkY2.Value;
|
|
|
|
sizeY[2] = (double)MarkY3.Value;
|
|
|
|
sizeY[3] = (double)MarkY4.Value;
|
|
|
|
|
|
|
|
defectX[0] = (double)qx_markX1.Value;
|
|
|
|
defectX[1] = (double)qx_markX2.Value;
|
|
|
|
defectX[2] = (double)qx_markX3.Value;
|
|
|
|
defectX[3] = (double)qx_markX4.Value;
|
|
|
|
|
|
|
|
defectY[0] = (double)qx_markY1.Value;
|
|
|
|
defectY[1] = (double)qx_markY2.Value;
|
|
|
|
defectY[2] = (double)qx_markY3.Value;
|
|
|
|
defectY[3] = (double)qx_markY4.Value;
|
|
|
|
HalconDotNet.HTuple GerBerPath = new HalconDotNet.HTuple(tbTZPath.Text);
|
|
|
|
HalconDotNet.HTuple FilePath = new HalconDotNet.HTuple(tbSFPath.Text);
|
|
|
|
HalconDotNet.HTuple hv_PoseMarkX_CCDSize = new HalconDotNet.HTuple(sizeX);
|
|
|
|
HalconDotNet.HTuple hv_PoseMarkY_CCDSize = new HalconDotNet.HTuple(sizeY);
|
|
|
|
HalconDotNet.HTuple hv_PoseMarkX_CCDDefect = new HalconDotNet.HTuple(defectX);
|
|
|
|
HalconDotNet.HTuple hv_PoseMarkY_CCDDefect = new HalconDotNet.HTuple(defectY);
|
|
|
|
HalconDotNet.HTuple hv_PoseZ_Size = new HalconDotNet.HTuple(zpos);
|
|
|
|
var ret = (bool)calToolsClass.CCDPoseCal_Mark(GerBerPath, FilePath, hv_PoseMarkX_CCDSize, hv_PoseMarkY_CCDSize,
|
|
|
|
hv_PoseMarkX_CCDDefect, hv_PoseMarkY_CCDDefect, hv_PoseZ_Size);
|
|
|
|
if(ret)
|
|
|
|
{
|
|
|
|
MessageBox.Show("主机台标定成功!", "标定");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
MessageBox.Show("主机台标定失败!", "标定", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
private void btnNoMarkCal_Click(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
CalToolsClass calToolsClass = new CalToolsClass();
|
|
|
|
double[] sizeX = new double[4];
|
|
|
|
double[] sizeY = new double[4];
|
|
|
|
double[] defectX = new double[4];
|
|
|
|
double[] defectY = new double[4];
|
|
|
|
double zpos = (double)ZPos.Value;
|
|
|
|
|
|
|
|
sizeX[0] = (double)markX1.Value;
|
|
|
|
sizeX[1] = (double)markX2.Value;
|
|
|
|
sizeX[2] = (double)markX3.Value;
|
|
|
|
sizeX[3] = (double)markX4.Value;
|
|
|
|
|
|
|
|
sizeY[0] = (double)MarkY1.Value;
|
|
|
|
sizeY[1] = (double)MarkY2.Value;
|
|
|
|
sizeY[2] = (double)MarkY3.Value;
|
|
|
|
sizeY[3] = (double)MarkY4.Value;
|
|
|
|
|
|
|
|
defectX[0] = (double)qx_markX1.Value;
|
|
|
|
defectX[1] = (double)qx_markX2.Value;
|
|
|
|
defectX[2] = (double)qx_markX3.Value;
|
|
|
|
defectX[3] = (double)qx_markX4.Value;
|
|
|
|
|
|
|
|
defectY[0] = (double)qx_markY1.Value;
|
|
|
|
defectY[1] = (double)qx_markY2.Value;
|
|
|
|
defectY[2] = (double)qx_markY3.Value;
|
|
|
|
defectY[3] = (double)qx_markY4.Value;
|
|
|
|
HalconDotNet.HTuple GerBerPath = new HalconDotNet.HTuple(tbTZPath.Text);
|
|
|
|
HalconDotNet.HTuple FilePath = new HalconDotNet.HTuple(tbSFPath.Text);
|
|
|
|
HalconDotNet.HTuple hv_PoseMarkX_CCDSize = new HalconDotNet.HTuple(sizeX);
|
|
|
|
HalconDotNet.HTuple hv_PoseMarkY_CCDSize = new HalconDotNet.HTuple(sizeY);
|
|
|
|
HalconDotNet.HTuple hv_PoseMarkX_CCDDefect = new HalconDotNet.HTuple(defectX);
|
|
|
|
HalconDotNet.HTuple hv_PoseMarkY_CCDDefect = new HalconDotNet.HTuple(defectY);
|
|
|
|
HalconDotNet.HTuple hv_PoseZ_Size = new HalconDotNet.HTuple(zpos);
|
|
|
|
var ret = (bool)calToolsClass.CCDPoseCal_Corner(GerBerPath, FilePath, hv_PoseMarkX_CCDSize, hv_PoseMarkY_CCDSize,
|
|
|
|
hv_PoseMarkX_CCDDefect, hv_PoseMarkY_CCDDefect, hv_PoseZ_Size);
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
MessageBox.Show("主机台无Mark标定成功!", "标定");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
MessageBox.Show("主机台无Mark标定失败!", "标定", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
private void btnCal_Click(object sender, EventArgs e)
|
|
|
|
{
|
|
|
|
CalToolsClass calToolsClass = new CalToolsClass();
|
|
|
|
double BeforeX = (double)bX1.Value;
|
|
|
|
double BeforeY = (double)bY1.Value;
|
|
|
|
double AfterX = (double)aX1.Value;
|
|
|
|
double AfterY = (double)aY1.Value;
|
|
|
|
|
|
|
|
HalconDotNet.HTuple hv_BeforeX = new HalconDotNet.HTuple(BeforeX);
|
|
|
|
HalconDotNet.HTuple hv_BeforeY = new HalconDotNet.HTuple(BeforeY);
|
|
|
|
HalconDotNet.HTuple hv_AfterX = new HalconDotNet.HTuple(AfterX);
|
|
|
|
HalconDotNet.HTuple hv_AfterY = new HalconDotNet.HTuple(AfterY);
|
|
|
|
|
|
|
|
var ret = (bool)calToolsClass.RepairCal_1();
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
ret = (bool)calToolsClass.RepairCal_2(hv_BeforeX, hv_BeforeY, hv_AfterX, hv_AfterY);
|
|
|
|
if (ret)
|
|
|
|
{
|
|
|
|
MessageBox.Show("修复台标定成功!", "标定");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
MessageBox.Show("修复台标定失败!", "标定", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
MessageBox.Show("修复台关联标定失败!", "标定", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
public class DefectCntInfo
|
|
|
|
{
|
|
|
|
|