#include "StdAfx.h" #include "AnaResultFile.h" #include "akCore/akFileDB.h" #include "akLoggerExt.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif CAnaResultFile::CAnaResultFile(void) { } CAnaResultFile::~CAnaResultFile(void) { } BOOL CAnaResultFile::MakeAnaFile(CgrmGlassRawData* pData, CString strPath) { char* pCellCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; CString strFilePathName; 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) { 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 >*/ 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); for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",ZoneDiffMax%02d", i); for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",ZoneDiffAvg%02d", i); 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); /* < 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¹ÝÀü { /* < 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]); } //210123 CJH - Zoneº° min, max, avg °ª Ç¥±â for (int iz = 0; iz < MAX_ZONE_NUM; iz++) { fprintf(pf, ",%d", pDefect->m_sZoneValueMin[iz]); } for (int iz = 0; iz < MAX_ZONE_NUM; iz++) { fprintf(pf, ",%d", pDefect->m_sZoneValueMax[iz]); } for (int iz = 0; iz < MAX_ZONE_NUM; iz++) { fprintf(pf, ",%d", pDefect->m_sZoneValueAvg[iz]); } for (int iz = 0; iz < MAX_ZONE_NUM; iz++) { fprintf(pf, ",%d", pDefect->m_sZoneValueSrcMin[iz]); } for (int iz = 0; iz < MAX_ZONE_NUM; iz++) { fprintf(pf, ",%d", pDefect->m_sZoneValueSrcMax[iz]); } for (int iz = 0; iz < MAX_ZONE_NUM; iz++) { 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); 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"); } else { /* < 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]); } //210123 CJH - Zoneº° min, max, avg °ª Ç¥±â for (int iz = 0; iz < MAX_ZONE_NUM; iz++) { fprintf(pf, ",%d", pDefect->m_sZoneValueMin[iz]); } for (int iz = 0; iz < MAX_ZONE_NUM; iz++) { fprintf(pf, ",%d", pDefect->m_sZoneValueMax[iz]); } for (int iz = 0; iz < MAX_ZONE_NUM; iz++) { fprintf(pf, ",%d", pDefect->m_sZoneValueAvg[iz]); } for (int iz = 0; iz < MAX_ZONE_NUM; iz++) { fprintf(pf, ",%d", pDefect->m_sZoneValueSrcMin[iz]); } for (int iz = 0; iz < MAX_ZONE_NUM; iz++) { fprintf(pf, ",%d", pDefect->m_sZoneValueSrcMax[iz]); } for (int iz = 0; iz < MAX_ZONE_NUM; iz++) { fprintf(pf, ",%d", pDefect->m_sZoneValueSrcAvg[iz]); } /* < 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, "\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); fclose(pf); return TRUE; }