From 0c66940a8e2cf64c9890519901f433b3668216b6 Mon Sep 17 00:00:00 2001
From: KEJ <kimeungju@diteam.co.kr>
Date: 수, 26 6월 2024 15:13:18 +0900
Subject: [PATCH] Ongoing80 #4942 CF AOI Review Bin File Loading 실패 개선  1. GlassRawMessenger 동기화  2. BIN파일 FindFile 제거(RawMessenger, Review 공통)  3. Unloading 시 BIN파일 제거

---
 DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp |   92 +++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 78 insertions(+), 14 deletions(-)

diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp
index 10087f0..0bde8c6 100644
--- a/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp
+++ b/DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp
@@ -16,12 +16,16 @@
 {
 }
 
-BOOL CAnaResultFile::MakeAnaFile(CgrmGlassRawData* pData)
+BOOL CAnaResultFile::MakeAnaFile(CgrmGlassRawData* pData, CString strPath)
 {
-	//return TRUE;
-
+	char* pCellCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
 	CString strFilePathName;
-	strFilePathName.Format("%s\\%sana", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strFileName);
+	CString strFileName = pData->GetGlassData()->m_strFileName;
+	strFileName.Replace(".bin", ".csv");
+	/* < KJG 20240620 - #4942 MOD Start >*/ 
+	//strFilePathName.Format("%s\\%s", pData->GetGlassData()->m_strPath, strFileName);
+	strFilePathName.Format(_T("%s\\%s"), strPath, strFileName);
+	/* < KJG 20240620 - #4942 MOD End > */
 
 	FILE* pf = fopen(strFilePathName.GetBuffer(0), "w");
 	if (pf == NULL)
@@ -29,9 +33,12 @@
 		AKLOG("MakeAOIFile Fail : [%s]", strFilePathName.GetBuffer(0));
 		return FALSE;
 	}
+	/* < KJG 20220225 - #4000 MOD Start >*/ 
+	//fprintf(pf, "%s\n", pData->GetGlassData()->m_strGlassID);
+	//fprintf(pf, "GlassID, m_strImageName, m_strDefectCode, UMCenterAlignX, UMCenterAlignY, m_nLevelSrcMin, m_nLevelSrcMax, m_nLevelSrcAvg, m_nLevelRefMin, m_nLevelRefMax, m_nLevelRefAvg, m_nLevelDiffMin, m_nLevelDiffMax, m_nLevelDiffAvg");
+	fprintf(pf, "GlassID, SubPanelID, m_strImageName, m_strDefectCode, UMCenterAlignX, UMCenterAlignY, m_nLevelSrcMin, m_nLevelSrcMax, m_nLevelSrcAvg, m_nLevelRefMin, m_nLevelRefMax, m_nLevelRefAvg, m_nLevelDiffMin, m_nLevelDiffMax, m_nLevelDiffAvg");
+	/* < KJG 20220225 - #4000 MOD End >*/
 
-	fprintf(pf, "%s\n", pData->GetGlassData()->m_strGlassID);
-	fprintf(pf, "GlassID, m_strImageName, m_strDefectCode, UMCenterAlignX, UMCenterAlignY, m_nLevelSrcMin, m_nLevelSrcMax, m_nLevelSrcAvg, m_nLevelRefMin, m_nLevelRefMax, m_nLevelRefAvg, m_nLevelDiffMin, m_nLevelDiffMax, m_nLevelDiffAvg");
 	for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",Zone%02d", i);
 	//210123 CJH - Zone별 min, max, avg 값 표기
 	for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",ZoneDiffMin%02d", i);
@@ -40,19 +47,66 @@
 	for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",ZoneSrcMin%02d", i);
 	for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",ZoneSrcMax%02d", i);
 	for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",ZoneSrcAvg%02d", i);
-	fprintf(pf, ", m_sDefectPeak, m_nPixelSize, DefectType, UMSize, Density, ScrtRatio, MergeState, Angle, Major, Minor, Compact, Thickness");
+/* < KMH 20220816 : #4271 MOD Start > */
+	// R_Scale, GateLine, DataLine, Channel 항목추가
+	//fprintf(pf, ", m_sDefectPeak, m_nPixelSize, DefectType, UMSize, Density, ScrtRatio, MergeState, Angle, Major, Minor, Compact, Thickness");
+	fprintf(pf, ", DefectPeak, PixelSize, DefectType, UMSize, R_Scale, Density, ScrtRatio, MergeState, Angle, Major, Minor, Compact, Thickness, GateLine, DataLine, Channel");
+/* < KMH 20220816 : #4271 MOD End > */
 	fprintf(pf, "\n");
 
 	for (int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++)
 	{
 		_grmDefectData* pDefect = pData->GetDefectData(iDefect);
+		/* < KJG 20220225 - #4000 ADD Start >*/ 
+		CString strDefectCellID;
+	/* < KMH 20220728 : # MOD Start > */
+		//strDefectCellID.Format("%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pDefect->m_nCellIdx / 36, pCellCode[pDefect->m_nCellIdx % 36]);
+
+		// enum DefectLocation { DefectLoc_Pattern = 0, DefectLoc_Crack, DefectLoc_BM, DefectLoc_ASG, DefectLoc_PAD, DefectLoc_C2C, DefectLoc_EdgeLine, DefectLoc_Proj, DefectLoc_Chip, DefectLoc_Corner, DefectLoc_DeepPad, DefectLoc_DeepAA, DefectLoc_CrackPT };
+		// 3,4,5 : PAD Defect
+		if (pDefect->m_sDefectLoc == 3 || pDefect->m_sDefectLoc == 4 || pDefect->m_sDefectLoc == 5)
+		{
+			_grmGlassData *pGlass = pData->GetGlassData();
+			int nMinDistance = max(pGlass->m_nGlassSizeWidth, pGlass->m_nGlassSizeHeight);
+
+			for (int iCell = 0; iCell < pGlass->m_nCellNum; iCell++)
+			{
+				_grmCellData* pCell = pData->GetCellData(iCell);
+
+				int nCellCenterX = (pCell->m_rectCellLeft + pCell->m_rectCellRight) / 2;	
+				int nCellCenterY = (pCell->m_rectCellTop + pCell->m_rectCellBottom) / 2;
+				//int nTempDistance = sqrt(pow(ptCellCenter.x - pDefect->m_nUMCenterAlignX,2) + pow(ptCellCenter.y - pDefect->m_nUMCenterAlignY,2));
+
+				if (pDefect->m_nModelIdx == pCell->m_nModelIdx)		// 디펙의 모델과 셀의 모델이 같을 때만 비교
+				{
+					int nTempDistance = abs(nCellCenterX - pDefect->m_nUMCenterAlignX) + abs(nCellCenterY - pDefect->m_nUMCenterAlignY);	// x,y 편차 합계
+				
+					if (nMinDistance > nTempDistance)
+					{ 
+						nMinDistance = nTempDistance;
+						strDefectCellID.Format("%s%s", pData->GetGlassData()->m_strGlassID, pCell->m_strCellName);
+					}
+				}
+			}
+		}
+		// PAD영역 외 결함처리
+		else
+		{
+			if (pDefect->m_nCellIdx >= 0) { strDefectCellID.Format("%s%s", pData->GetGlassData()->m_strGlassID, pData->GetCellData(pDefect->m_nCellIdx)->m_strCellName); }
+		}
+	/* < KMH 20220728 : # MOD End > */
+		/* < KJG 20220225 - #4000 ADD End >*/
 		if (pData->GetGlassData()->m_nScanCoordinateY == 1) //분판설비의 경우 XY반전
 		{
-			fprintf(pf, "%s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d",
-				pData->GetGlassData()->m_strGlassID, pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignY / 1000.0, (double)pDefect->m_nUMCenterAlignX / 1000.0,
+			/* < KJG 20220225 - #4000 MOD Start >*/ 
+			//fprintf(pf, "%s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d",
+			//	pData->GetGlassData()->m_strGlassID, pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignY / 1000.0, (double)pDefect->m_nUMCenterAlignX / 1000.0,
+			fprintf(pf, "%s, %s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d",
+				pData->GetGlassData()->m_strGlassID, strDefectCellID.GetBuffer(0), pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignY / 1000.0, (double)pDefect->m_nUMCenterAlignX / 1000.0,
 				pDefect->m_nLevelSrcMin, pDefect->m_nLevelSrcMax, pDefect->m_nLevelSrcAvg,
 				pDefect->m_nLevelRefMin, pDefect->m_nLevelRefMax, pDefect->m_nLevelRefAvg,
 				pDefect->m_nLevelDiffMin, pDefect->m_nLevelDiffMax, pDefect->m_nLevelDiffAvg);
+			/* < KJG 20220225 - #4000 MOD End >*/
 			for (int iz = 0; iz < MAX_ZONE_NUM; iz++)
 			{
 				fprintf(pf, ",%d", pDefect->m_sZonePixelCount[iz]);
@@ -91,11 +145,15 @@
 		}
 		else
 		{
-			fprintf(pf, "%s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d",
-				pData->GetGlassData()->m_strGlassID, pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignX / 1000.0, (double)pDefect->m_nUMCenterAlignY / 1000.0,
+			/* < KJG 20220225 - #4000 MOD Start >*/ 
+			//fprintf(pf, "%s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d",
+			//	pData->GetGlassData()->m_strGlassID, pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignX / 1000.0, (double)pDefect->m_nUMCenterAlignY / 1000.0,
+			fprintf(pf, "%s, %s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d",
+				pData->GetGlassData()->m_strGlassID, strDefectCellID.GetBuffer(0), pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignX / 1000.0, (double)pDefect->m_nUMCenterAlignY / 1000.0,
 				pDefect->m_nLevelSrcMin, pDefect->m_nLevelSrcMax, pDefect->m_nLevelSrcAvg,
 				pDefect->m_nLevelRefMin, pDefect->m_nLevelRefMax, pDefect->m_nLevelRefAvg,
 				pDefect->m_nLevelDiffMin, pDefect->m_nLevelDiffMax, pDefect->m_nLevelDiffAvg);
+			/* < KJG 20220225 - #4000 MOD End >*/
 			for (int iz = 0; iz < MAX_ZONE_NUM; iz++)
 			{
 				fprintf(pf, ",%d", pDefect->m_sZonePixelCount[iz]);
@@ -125,12 +183,18 @@
 			{
 				fprintf(pf, ",%d", pDefect->m_sZoneValueSrcAvg[iz]);
 			}
-			fprintf(pf, ",%d, %d, %d, %d, %d, %d, %d",
-				pDefect->m_sDefectPeak, pDefect->m_nPixelSize, pDefect->m_DefectType, (int)pDefect->m_nUMSize, pDefect->m_nDensity, pDefect->m_nScratchRatio, pDefect->m_bMergeState);
+		/* < KMH 20220816 : #4271 MOD Start > */
+			//fprintf(pf, ",%d, %d, %d, %d, %d, %d, %d",
+			//	pDefect->m_sDefectPeak, pDefect->m_nPixelSize, pDefect->m_DefectType, (int)pDefect->m_nUMSize, pDefect->m_nDensity, pDefect->m_nScratchRatio, pDefect->m_bMergeState);
+			//fprintf(pf, ", %d, %d, %d, %d, %d", pDefect->m_nAngle, pDefect->m_nMajor, pDefect->m_nMinor, pDefect->m_nCompact, pDefect->m_nThickness);
 
-			fprintf(pf, ", %d, %d, %d, %d, %d", pDefect->m_nAngle, pDefect->m_nMajor, pDefect->m_nMinor, pDefect->m_nCompact, pDefect->m_nThickness);
+			//fprintf(pf, "\n");
+			fprintf(pf, ",%d, %d, %d, %d, %d, %d, %d, %d",
+				pDefect->m_sDefectPeak, pDefect->m_nPixelSize, pDefect->m_DefectType, (int)pDefect->m_nUMSize, pDefect->m_nDefectRScale, pDefect->m_nDensity, pDefect->m_nScratchRatio, pDefect->m_bMergeState);
+			fprintf(pf, ", %d, %d, %d, %d, %d, %d, %d, %d", pDefect->m_nAngle, pDefect->m_nMajor, pDefect->m_nMinor, pDefect->m_nCompact, pDefect->m_nThickness, pDefect->m_nCellGate, pDefect->m_nCellData, pDefect->m_nHliLevelIdx);
 
 			fprintf(pf, "\n");
+		/* < KMH 20220816 : #4271 MOD End > */
 		}
 	}
 	AKLOG("MakeAnaFile Complete %s", strFilePathName);

--
Gitblit v1.9.3