2026-01-26 14:51:28 +09:00

177 lines
6.3 KiB
C#

using Aurora.Api.Devices;
using DataHub;
using Hermes.Functional;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VisionCommon.DB.Align {
public class VisionAlignDB: IMongoItemEntity {
#region key properties
// Key
[Browsable(false)]
public string _id { get; set; }
public DateTime? TimeStamp { get; set; }
public AlignInfo AlignInfo { get; set; }
public string RecipeModelType { get; set; }
public string RecipeModelName { get; set; }
public MaterialInfo MaterialInfo { get; set; }
public FlyingInfo FlyingInfo { get; set; }
#endregion
#region data properties
public string SeqStartDate { get; set; }
public int SeqId { get; set; }
public bool IsDryRunMode { get; set; } = false;
public string SeqMode { get; set; }
/// Result
public SeqTime SeqTime { get; set; }
public Position Delta { get; set; }
public string AlignAlgorithm { get; set; } = eAlignAlgorithm.AVG.ToString();
public int AlignCntIndex { get; set; } = 0;
/// <summary>
/// eAlignStatus
/// </summary>
public string AlignStatus { get; set; }
// Key : FovId
public List<PatternResultDB> PatternResults { get; set; }
public AlignRecipe AlignRecipe { get; set; }
#endregion
#region constructor
/// <summary>
/// 사용 X, Deserialize를 위한 constructor
/// </summary>
public VisionAlignDB() { }
public VisionAlignDB(AlignInfo alignInfo, eSeqMode alignSeqMode, int seqId = 0) {
var visionSetting = VisionSettingManager.VisionSetting;
AlignInfo = alignInfo;
RecipeModelType = visionSetting.RecipeModelType.ToString();
RecipeModelName = visionSetting.RecipeModelType == eRecipeModelType.AuroraRecipe ? VisionEnv.AuroraEnv.RecipeManager.ActivatedRecipe().Name :
VisionEnv.AuroraEnv.RecipeManager.ActivatedModelName();
AlignRecipe = VisionRecipeManager.GetAlignRecipe(alignInfo).Clone();
SeqMode = alignSeqMode.ToString();
// Create Instance Data
SeqTime = new SeqTime() { AlignSeqStart = DateTime.Now };
MaterialInfo = new MaterialInfo();
FlyingInfo = new FlyingInfo();
SeqStartDate = DateTime.Now.ToShortDateString();
PatternResults = new List<PatternResultDB>();
SeqId = seqId;
}
#endregion
#region alloc methods
public void AllocAlignResult(AlignResult alignResult) {
Delta = alignResult.Delta.ToPosition();
AlignAlgorithm = alignResult.AlignAlgorithm.ToString();
AlignCntIndex = alignResult.AlignCnt;
AlignStatus = alignResult.Status.ToString();
AllocPatternResults(alignResult.PatternResults);
}
public void AllocPatternResults(Dictionary<FovInfo, PatternResult> patternResults) {
var keys = patternResults.Keys;
keys.ForEach(x => PatternResults.Add(new PatternResultDB(patternResults[x])));
}
#endregion
#region set methods
public void SetMaterialInfo(MaterialInfo materialInfo) {
MaterialInfo = materialInfo;
}
public void SetFlyingInfo(FlyingInfo flyingInfo) {
FlyingInfo = flyingInfo;
}
public void SetSeqEnd() {
SeqTime.AlignSeqEnd = DateTime.Now;
}
#endregion
}
#region VisionAlignDB Components ( for deserialize )
/// <summary>
/// Sequence Time
/// </summary>
public class SeqTime {
public DateTime AlignSeqStart { get; set; }
public DateTime AlignSeqEnd { get; set; }
}
/// <summary>
/// Flying Info
/// </summary>
public class FlyingInfo {
public bool UseFlying { get; set; } = false;
public int FlyingSeqId { get; set; }
public FlyingInfo() {
UseFlying = false;
FlyingSeqId = 0;
}
}
/// <summary>
/// Patter Result를 DB 화 시킨 Class
/// </summary>
public class PatternResultDB {
private PatternResult patternResult;
public PatternResultDB(PatternResult patternResult) {
this.patternResult = patternResult;
GrabTime = new Random().Next(1, 30);
PatternInfo = new PatternInfoDB(
patternResult?.PatternIndex ?? new PatternIndex(eUnitId.Unit1, eSubSysId.SubSys1, eFovId.Fov1, -1),
"Description", patternResult?.PatternType.ToString() ?? "", patternResult?.PatternName ?? "");
FoundStatus = patternResult?.Status.ToString() ?? "";
TactTime = patternResult?.TactTimeInMilliSec ?? -1;
ImagePath = @":c\test";
OverlayImagePath = @":c\test";
Results = patternResult?.Results.ToList() ?? null;
FovId = patternResult?.FovId.ToString() ?? "";
}
public PatternResultDB() {
PatternInfo = new PatternInfoDB();
Results = new List<BaseResult>();
}
public double GrabTime { get; set; }
public string FovId { get; set; }
public PatternInfoDB PatternInfo { get; set; }
public string FoundStatus { get; set; }
public double TactTime { get; set; }
public string ImagePath { get; set; }
public string OverlayImagePath { get; set; }
public List<BaseResult> Results { get; set; }
}
/// <summary>
/// Pattern Info를 DB 화 시킨 Class
/// </summary>
public class PatternInfoDB {
public int PatternId { get; set; } = 0;
public int PatternSubId { get; set; } = 0;
public string Description { get; set; } = "";
public string PatternType { get; set; } = "";
public string PatternName { get; set; } = "";
public PatternInfoDB(PatternIndex patternIndex, string description, string patternType, string patternName) {
PatternId = patternIndex.PatternId;
PatternSubId = patternIndex.PatternSubId;
Description = description;
PatternType = patternType;
PatternName = patternName;
}
public PatternInfoDB() {
}
}
#endregion
}