添加 MX-PD-盘古 项目文件
将 MX-PD-盘古 - new 目录下的所有文件添加到主仓库
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
using MainShell.AlgorithmCalib.Common;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using SemiPoint = SemiconductorVisionAlgorithm.SemiParams.Point;
|
||||
|
||||
namespace MainShell.AlgorithmCalib.Model
|
||||
{
|
||||
public static class FusionCalibModuleNames
|
||||
{
|
||||
public const string DieFusion = "Die融合标定";
|
||||
public const string PadFusion = "Pad融合标定";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 融合标定模块参数
|
||||
/// Die和Pad共用,通过 IsWaferCalib 区分
|
||||
/// </summary>
|
||||
public class FusionCalibModuleItem
|
||||
{
|
||||
// ===== 通用属性 =====
|
||||
public string ModuleName { get; set; }
|
||||
public bool IsIndependent { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
public IAlgorithmCalibrationPostProcessor PostProcessor { get; set; }
|
||||
|
||||
// ===== 融合标定参数 =====
|
||||
public int Index { get; set; }
|
||||
public string Camera_ID { get; set; }
|
||||
public bool IsWaferCalib { get; set; } // true=Die(WS轴), false=Pad(PHS轴)
|
||||
|
||||
// 位置参数
|
||||
public double MoveAxisPos { get; set; } // 移动轴位置(Die=X1, Pad=Y1)
|
||||
public double ApproachXPos { get; set; } // 逼近X(Die=X2, Pad=X1)
|
||||
public double ApproachYPos { get; set; } // 逼近Y(Die=Y1, Pad=Y2)
|
||||
public double CameraAxisPos { get; set; } // 相机轴起始位置
|
||||
|
||||
// 标定范围参数
|
||||
public double StartX { get; set; } // 起始X
|
||||
public double StartY { get; set; } // 起始Y
|
||||
public double Step { get; set; } // 步进距离
|
||||
public int Count { get; set; } // 组数
|
||||
|
||||
// 网格参数
|
||||
public double CalibStep { get; set; } // 网格步长
|
||||
public int CalibCount { get; set; } // 网格行列数
|
||||
|
||||
// 模板路径
|
||||
public string ModelPath { get; set; } = "";
|
||||
|
||||
// ===== 验证参数 =====
|
||||
public double WaferStartVerifyX { get; set; } // 验证起点X(Die=X2, Pad=X1)
|
||||
public double WaferStartVerifyY { get; set; } // 验证起点Y(Die=Y1, Pad=Y2)
|
||||
public double WaferVerityStep { get; set; } // 验证步进
|
||||
public int WaferVerityCountX { get; set; } // 验证X方向数量
|
||||
public int WaferVerityCountY { get; set; } // 验证Y方向数量
|
||||
|
||||
// ===== 对位验证参数 =====
|
||||
// Die对位:飞拍die坐标
|
||||
public double DieRealX { get; set; } // die实际X(real坐标)
|
||||
public double DieRealY { get; set; } // die实际Y(real坐标)
|
||||
public double DieRulerX { get; set; } // die轴位置X(ruler坐标)
|
||||
public double DieRulerY { get; set; } // die轴位置Y(ruler坐标)
|
||||
|
||||
// Pad对位:飞拍pad坐标
|
||||
public double PadRealX { get; set; } // pad实际X(real坐标)
|
||||
public double PadRealY { get; set; } // pad实际Y(real坐标)
|
||||
public double PadRulerX { get; set; } // pad轴位置X(ruler坐标)
|
||||
public double PadRulerY { get; set; } // pad轴位置Y(ruler坐标)
|
||||
|
||||
// 对位结果
|
||||
public double AlignResultX { get; set; } // 对齐后X1偏移量
|
||||
public double AlignResultY { get; set; } // 对齐后Y1偏移量
|
||||
public double AlignResultX2 { get; set; } // X2补偿量
|
||||
|
||||
// ===== 运行时结果(不序列化) =====
|
||||
[JsonIgnore]
|
||||
public List<SemiPoint> RulerPoints { get; set; } = new List<SemiPoint>();
|
||||
[JsonIgnore]
|
||||
public List<SemiPoint> RealPoints { get; set; } = new List<SemiPoint>();
|
||||
// Die网格飞拍数据
|
||||
[JsonIgnore]
|
||||
public List<Tuple<int, int, SemiPoint>> DieGridPoints { get; set; } = new List<Tuple<int, int, SemiPoint>>();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
using MainShell.Filewritable;
|
||||
using MXJM.FileWritable;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace MainShell.AlgorithmCalib.Model
|
||||
{
|
||||
public class FusionCalibSetting : JsonFileWritableBase
|
||||
{
|
||||
[JsonIgnore]
|
||||
public override string Dir => Paths.CalibSettingPath;
|
||||
|
||||
[JsonIgnore]
|
||||
public override string FileName => "FusionCalibSetting.json";
|
||||
|
||||
// Pad融合的4组模块
|
||||
public List<FusionCalibModuleItem> PadModules { get; set; } = new List<FusionCalibModuleItem>();
|
||||
|
||||
// Die融合的参数(单组)
|
||||
public FusionCalibModuleItem DieModule { get; set; } = new FusionCalibModuleItem();
|
||||
|
||||
public static FusionCalibSetting LoadOrCreate()
|
||||
{
|
||||
var setting = new FusionCalibSetting();
|
||||
string path = Path.Combine(setting.Dir, setting.FileName);
|
||||
if (File.Exists(path))
|
||||
{
|
||||
setting.Read(path);
|
||||
setting.EnsureCollections();
|
||||
return setting;
|
||||
}
|
||||
|
||||
setting.PadModules = CreateDefaultPadModules();
|
||||
setting.DieModule = CreateDefaultDieModule();
|
||||
setting.Write(path);
|
||||
return setting;
|
||||
}
|
||||
|
||||
public void EnsureCollections()
|
||||
{
|
||||
if (PadModules == null)
|
||||
PadModules = new List<FusionCalibModuleItem>();
|
||||
if (DieModule == null)
|
||||
DieModule = CreateDefaultDieModule();
|
||||
}
|
||||
|
||||
private static List<FusionCalibModuleItem> CreateDefaultPadModules()
|
||||
{
|
||||
var modules = new List<FusionCalibModuleItem>();
|
||||
for (int i = 1; i <= 4; i++)
|
||||
{
|
||||
modules.Add(new FusionCalibModuleItem
|
||||
{
|
||||
ModuleName = FusionCalibModuleNames.PadFusion,
|
||||
IsIndependent = true,
|
||||
Index = i,
|
||||
Camera_ID = $"Fusion_Time{i}",
|
||||
IsWaferCalib = false,
|
||||
CalibStep = 0.4,
|
||||
CalibCount = 10,
|
||||
Count = 4,
|
||||
Step = 5.0,
|
||||
});
|
||||
}
|
||||
return modules;
|
||||
}
|
||||
|
||||
private static FusionCalibModuleItem CreateDefaultDieModule()
|
||||
{
|
||||
return new FusionCalibModuleItem
|
||||
{
|
||||
ModuleName = FusionCalibModuleNames.DieFusion,
|
||||
IsIndependent = true,
|
||||
Index = 1,
|
||||
Camera_ID = "DieFusion",
|
||||
IsWaferCalib = true,
|
||||
CalibStep = 0.4,
|
||||
CalibCount = 10,
|
||||
Count = 4,
|
||||
Step = 5.0,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user