SDC C-Project CF Review 프로그램
LYW
2021-07-08 9cbd9e554f9956b3b945b51602f1d4a3fa0353e1
ReviewHistory/ReveiwHistory/MacroResultFile.cpp
»õ ÆÄÀÏ
@@ -0,0 +1,357 @@
#include "StdAfx.h"
#include "MacroResultFile.h"
#include "akCore/akFileDB.h"
//0404nwh
#include "akGridData.h"
#include <process.h>
#include "DitGlassRawClient.h"
#include "GlassRawBase.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CMacroResultFile::CMacroResultFile(void)
{
   m_bReadSuccess = FALSE;
   readOptionFile();
}
CMacroResultFile::~CMacroResultFile(void)
{
   m_vecMacroDefect.clear();
}
BOOL CMacroResultFile::openFile( char* pFileName )
{
   m_bReadSuccess = FALSE;
   FILE* pf = fopen(pFileName, "r");
   if(pf == NULL)
      return FALSE;
   std::vector<_MacroDefect> vecMacroDefect;
   _MacroDefect MacroDefect;
   char buffer[1024];
   char* pReadPoint = NULL;
   char *pStr;
   while(!feof(pf))
   {
      pStr = fgets(buffer, 1024, pf);
      if(!strncmp(buffer, "ITEM,", 5)) continue;
      if(strlen(buffer) <= 0 || pStr == NULL)
         break;
      if(!strncmp(buffer, "DATA,CELLDATA", 13))//파싱 íƒœí˜„[2017/3/29]
      {
         //무라 ì…€íŒì •도 ë°˜ì˜ í•´ì•¼ í•˜ë‚˜?
      }
      else if(!strncmp(buffer, "DATA,DEFECTDATA", 15))//파싱 íƒœí˜„[2017/3/29]
      {
         pReadPoint = buffer;
         pReadPoint = getParsingData(pReadPoint, 15, &MacroDefect.ITEM      );
         pReadPoint = getParsingData(pReadPoint, 8,   &MacroDefect.DEFECTNO   );
         pReadPoint = getParsingData(pReadPoint, 20, &MacroDefect.CELLID      );
         pReadPoint = getParsingData(pReadPoint, 8,    &MacroDefect.COORD_X1   );
         pReadPoint = getParsingData(pReadPoint, 8,    &MacroDefect.COORD_Y1   );
         pReadPoint = getParsingData(pReadPoint, 9,    &MacroDefect.COORD_PX1   );
         pReadPoint = getParsingData(pReadPoint, 9,    &MacroDefect.COORD_PY1   );
         pReadPoint = getParsingData(pReadPoint, 6,    &MacroDefect.NOMURA      );
         pReadPoint = getParsingData(pReadPoint, 8,    &MacroDefect.JUDGE      );
         pReadPoint = getParsingData(pReadPoint, 8,    &MacroDefect.SIZE_W      );
         pReadPoint = getParsingData(pReadPoint, 8,    &MacroDefect.SIZE_L      );
         pReadPoint = getParsingData(pReadPoint, 15, &MacroDefect.SIZE_S      );
         pReadPoint = getParsingData(pReadPoint, 15, &MacroDefect.MAIN_TYPE   );
         pReadPoint = getParsingData(pReadPoint, 15, &MacroDefect.SUB_TYPE   );
         pReadPoint = getParsingData(pReadPoint, 6,    &MacroDefect.PEAK      );
         pReadPoint = getParsingData(pReadPoint, 6,    &MacroDefect.G_MIN      );
         pReadPoint = getParsingData(pReadPoint, 6,    &MacroDefect.G_MAX      );
         pReadPoint = getParsingData(pReadPoint, 6,    &MacroDefect.G_AVG      );
         pReadPoint = getParsingData(pReadPoint, 3,    &MacroDefect.CAM      );
         pReadPoint = getParsingData(pReadPoint, 4,    &MacroDefect.SCAN      );
         pReadPoint = getParsingData(pReadPoint, 10, &MacroDefect.PIXEL_PEAK   );
         pReadPoint = getParsingData(pReadPoint, 6,    &MacroDefect.REGION      );
         pReadPoint = getParsingData(pReadPoint, 8,    &MacroDefect.MASK_T      );
         pReadPoint = getParsingData(pReadPoint, 6,    &MacroDefect.SIZE_T      );
         pReadPoint = getParsingData(pReadPoint, 6,    &MacroDefect.PEAK_T      );
         pReadPoint = getParsingData(pReadPoint, 69, &MacroDefect.IMG_FILE_NAME);
         MacroDefect.IMG_FILE_NAME = MacroDefect.IMG_FILE_NAME.Left(70);
         MacroDefect.IMG_FILE_NAME.Remove(' ');
         vecMacroDefect.push_back(MacroDefect);
      }
   }
   fclose(pf);
   m_vecMacroDefect = vecMacroDefect;
   //빠른 ì°¾ê¸°ìš© map ìƒì„±
   {
      m_mapFind.clear();
      int nSize = m_vecMacroDefect.size();
      for(int i=0; i<nSize; i++)
      {
         m_mapFind.insert(std::make_pair(m_vecMacroDefect[i].COORD_X1, &m_vecMacroDefect[i]));
      }
   }
   m_bReadSuccess = TRUE;
   return TRUE;
}
char* CMacroResultFile::getParsingData( char* pBuf, int nLen, CString* pOutData )
{
   for(int i=nLen-1; i>=0; i--)
   {
      if(pBuf[i] != ' ')
      {
         pBuf[i+1] = 0;
         break;
      }
   }
   *pOutData = pBuf;
   return &pBuf[nLen+1]; //구분자 ê±´ë„ˆ ë›°ì–´ì„œ ë‹¤ìŒ ì½ì„ í¬ì¸íЏ ë„˜ê²¨ì¤€ë‹¤ íƒœí˜„[2017/3/29]
}
char* CMacroResultFile::getParsingData( char* pBuf, int nLen, int* pOutData )
{
   pBuf[nLen] = 0;
   *pOutData = atoi(pBuf);
   return &pBuf[nLen+1]; //구분자 ê±´ë„ˆ ë›°ì–´ì„œ ë‹¤ìŒ ì½ì„ í¬ì¸íЏ ë„˜ê²¨ì¤€ë‹¤ íƒœí˜„[2017/3/29]
}
BOOL CMacroResultFile::readOptionFile( char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ )
{
   CakFileDB fileDB;
   fileDB.openfile(pFileName);
   char strTemp[256]={};
   fileDB.getItem("MACROPATH_ENABLE", &m_bMacroResultFile, 0);
   fileDB.getItem("MACROPATH_RAW", strTemp, ""); m_strMacroResultRawPath= strTemp;
   fileDB.getItem("MACROPATH_IMAGE", strTemp, ""); m_strMacroResultImagePath= strTemp;
   fileDB.getItem("SERVERPATH_RAW", strTemp, ""); m_strServerResultRawPath= strTemp;
   fileDB.getItem("SERVERPATH_IMAGE", strTemp, "");m_strServerResultImagePath = strTemp;
   fileDB.getItem("MACRO_READ_TIME", (int*)&m_dwMacroReadTime, 3000);
   return TRUE;
}
int CMacroResultFile::GetDefectNum( int iCell )
{
   int nSize = (int)m_vecMacroDefect.size();
   int nDefectNum = 0;
   for(int i=0; i<nSize; i++)
   {
      if(m_vecMacroDefect[i].CELLID == iCell)
      {
         nDefectNum++;
      }
   }
   return nDefectNum;
}
int CMacroResultFile::GetSubPanelNum(int iCell) //0404nwh
{
   int nSize = (int)m_vecMacroSubPanel.size();
   int nSubPanelNum = 0;
   for (int i = 0; i < nSize; i++)
   {
      if (m_vecMacroSubPanel[i].PRO_IMAGE == iCell)
      {
         nSubPanelNum++;
      }
   }
   return nSubPanelNum;
}
//KMS - 190125 MuraDefect ì°¾ê¸°
_MacroDefect* CMacroResultFile::FindDefect( int nX, int nY ,int nFindRange)
{
   _MacroDefect *pMDefect = NULL;
   std::multimap<int,_MacroDefect*>::iterator itLowerBound;
   std::multimap<int,_MacroDefect*>::iterator itUpperBound;
   itLowerBound = m_mapFind.lower_bound(nX - nFindRange);
   itUpperBound = m_mapFind.upper_bound(nX + nFindRange);
   _MacroDefect *pMDefectMin = NULL;
   int nMinDistance = nFindRange*nFindRange;
   int nDistance;
   for (itLowerBound; itLowerBound != itUpperBound; itLowerBound++)
   {
      pMDefect = static_cast<_MacroDefect*>(itLowerBound->second);
      if(!pMDefect)   continue;
      if(abs(nY - pMDefect->COORD_Y1) < nFindRange)
      {
         nDistance = ((nX - pMDefect->COORD_X1) * (nX - pMDefect->COORD_X1)) + ((nY - pMDefect->COORD_Y1) * (nY - pMDefect->COORD_Y1));
         if(nDistance < nMinDistance)
         {
            nMinDistance = nDistance;
            pMDefectMin = pMDefect;
         }
      }
   }
   return pMDefectMin;
}
BOOL CMacroResultFile::openFile_Mura(char* pFileName)//0404nwh
{
   m_bReadSuccess = FALSE;
   FILE* pf = fopen(pFileName, "r");
   if (pf == NULL)
      return FALSE;
   CDitGlassRawClient   GlassRawClient;
   GlassRawClient.ConnectServer();
   CDitGlassRawClient* pShared = &GlassRawClient;
   _grmCellData* pGrmMura;
   std::vector<_MacroSubPanel> vecMacroSubPanel;
   _MacroSubPanel MacroSubPanel;
   char buffer[1024];
   char* pReadPoint = NULL;
   char *pStr;
   CString stranelData = "DATA PANEL";
   CString strSubPanelData = "DATA SUBPANEL";
   CString strMaxAvgGray, strMaxPortion;
   while (!feof(pf))
   {
      pStr = fgets(buffer, 1024, pf);
      if (strlen(buffer) <= 0 || pStr == NULL)
         break;
      if (!strncmp(buffer, stranelData, strlen(stranelData)))// ë„어쓰기 íŒŒì‹±
      {
         CakParser paser;
         if (strlen(buffer) <= 0) continue;
         paser.process(buffer, " ");
         int nTokNum = paser.getTokNum();
         if (nTokNum < 42) continue;
         strMaxAvgGray = paser.getTokStr(41);
         strMaxPortion = paser.getTokStr(42);
      }
      if (!strncmp(buffer, strSubPanelData, strlen(strSubPanelData)))// ë„어쓰기 íŒŒì‹±
      {
         CakParser paser;
         if (strlen(buffer) <= 0) continue;
         paser.process(buffer, " ");
         int nTokNum = paser.getTokNum();
         if (nTokNum < 52) continue; //kyh 31->52
         MacroSubPanel.PRO_IMAGE = paser.getTokStr(20);
         MacroSubPanel.AVG_GRAY_0 = paser.getTokStr(21);
         MacroSubPanel.PORTION_0 = paser.getTokStr(22);
         //kyh ì¶”ê°€
         MacroSubPanel.CORNER_GRAY_0 = paser.getTokStr(23);
         MacroSubPanel.AVG_AMP_0 = paser.getTokStr(24);
         MacroSubPanel.FFT_VAR_0 = paser.getTokStr(25);
         MacroSubPanel.FFT_VAH_0 = paser.getTokStr(26);
         MacroSubPanel.FFT_VAQ_0 = paser.getTokStr(27);
         MacroSubPanel.FFT_PK_0 = paser.getTokStr(28);
         MacroSubPanel.AVG_GRAY_1 = paser.getTokStr(29);
         MacroSubPanel.PORTION_1 = paser.getTokStr(30);
         //kyh ì¶”ê°€
         MacroSubPanel.CORNER_GRAY_1 = paser.getTokStr(31);
         MacroSubPanel.AVG_AMP_1 = paser.getTokStr(32);
         MacroSubPanel.FFT_VAR_1 = paser.getTokStr(33);
         MacroSubPanel.FFT_VAH_1 = paser.getTokStr(34);
         MacroSubPanel.FFT_VAQ_1 = paser.getTokStr(35);
         MacroSubPanel.FFT_PK_1 = paser.getTokStr(36);
         MacroSubPanel.AVG_GRAY_2 = paser.getTokStr(37);
         MacroSubPanel.PORTION_2 = paser.getTokStr(38);
         //kyh ì¶”ê°€
         MacroSubPanel.CORNER_GRAY_2 = paser.getTokStr(39);
         MacroSubPanel.AVG_AMP_2 = paser.getTokStr(40);
         MacroSubPanel.FFT_VAR_2 = paser.getTokStr(41);
         MacroSubPanel.FFT_VAH_2 = paser.getTokStr(42);
         MacroSubPanel.FFT_VAQ_2 = paser.getTokStr(43);
         MacroSubPanel.FFT_PK_2 = paser.getTokStr(44);
         MacroSubPanel.AVG_GRAY_3 = paser.getTokStr(45);
         MacroSubPanel.PORTION_3 = paser.getTokStr(46);
         //kyh ì¶”ê°€
         MacroSubPanel.CORNER_GRAY_3 = paser.getTokStr(47);
         MacroSubPanel.AVG_AMP_3 = paser.getTokStr(48);
         MacroSubPanel.FFT_VAR_3 = paser.getTokStr(49);
         MacroSubPanel.FFT_VAH_3 = paser.getTokStr(50);
         MacroSubPanel.FFT_VAQ_3 = paser.getTokStr(51);
         MacroSubPanel.FFT_PK_3 = paser.getTokStr(52);
         vecMacroSubPanel.push_back(MacroSubPanel);
      }
   }
   fclose(pf);
   m_vecMacroSubPanel = vecMacroSubPanel;
   for (int i = 0; i < m_vecMacroSubPanel.size(); i++)
   {
      pGrmMura= pShared->GetCellData(i);
      strcpy(pGrmMura->m_strProImage, m_vecMacroSubPanel[i].PRO_IMAGE.GetBuffer(0));
      strcpy(pGrmMura->m_strAvgGray_0, m_vecMacroSubPanel[i].AVG_GRAY_0.GetBuffer(0));
      strcpy(pGrmMura->m_strPortion_0, m_vecMacroSubPanel[i].PORTION_0.GetBuffer(0));
      //kyh 0622
      strcpy(pGrmMura->m_strCorner_Gray_0, m_vecMacroSubPanel[i].CORNER_GRAY_0.GetBuffer(0));
      strcpy(pGrmMura->m_strAvgAmp_0, m_vecMacroSubPanel[i].AVG_AMP_0.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTVar_0, m_vecMacroSubPanel[i].FFT_VAR_0.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTVah_0, m_vecMacroSubPanel[i].FFT_VAH_0.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTVaq_0, m_vecMacroSubPanel[i].FFT_VAQ_0.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTPK_0, m_vecMacroSubPanel[i].FFT_PK_0.GetBuffer(0));
      strcpy(pGrmMura->m_strAvgGray_1, m_vecMacroSubPanel[i].AVG_GRAY_1.GetBuffer(0));
      strcpy(pGrmMura->m_strPortion_1, m_vecMacroSubPanel[i].PORTION_1.GetBuffer(0));
      //kyh 0622
      strcpy(pGrmMura->m_strCorner_Gray_1, m_vecMacroSubPanel[i].CORNER_GRAY_1.GetBuffer(0));
      strcpy(pGrmMura->m_strAvgAmp_1, m_vecMacroSubPanel[i].AVG_AMP_1.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTVar_1, m_vecMacroSubPanel[i].FFT_VAR_1.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTVah_1, m_vecMacroSubPanel[i].FFT_VAH_1.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTVaq_1, m_vecMacroSubPanel[i].FFT_VAQ_1.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTPK_1, m_vecMacroSubPanel[i].FFT_PK_1.GetBuffer(0));
      strcpy(pGrmMura->m_strAvgGray_2, m_vecMacroSubPanel[i].AVG_GRAY_2.GetBuffer(0));
      strcpy(pGrmMura->m_strPortion_2, m_vecMacroSubPanel[i].PORTION_2.GetBuffer(0));
      //kyh 0622
      strcpy(pGrmMura->m_strCorner_Gray_2, m_vecMacroSubPanel[i].CORNER_GRAY_2.GetBuffer(0));
      strcpy(pGrmMura->m_strAvgAmp_2, m_vecMacroSubPanel[i].AVG_AMP_2.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTVar_2, m_vecMacroSubPanel[i].FFT_VAR_2.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTVah_2, m_vecMacroSubPanel[i].FFT_VAH_2.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTVaq_2, m_vecMacroSubPanel[i].FFT_VAQ_2.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTPK_2, m_vecMacroSubPanel[i].FFT_PK_2.GetBuffer(0));
      strcpy(pGrmMura->m_strAvgGray_3, m_vecMacroSubPanel[i].AVG_GRAY_3.GetBuffer(0));
      strcpy(pGrmMura->m_strPortion_3, m_vecMacroSubPanel[i].PORTION_3.GetBuffer(0));
      //kyh 0622
      strcpy(pGrmMura->m_strCorner_Gray_3, m_vecMacroSubPanel[i].CORNER_GRAY_3.GetBuffer(0));
      strcpy(pGrmMura->m_strAvgAmp_3, m_vecMacroSubPanel[i].AVG_AMP_3.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTVar_3, m_vecMacroSubPanel[i].FFT_VAR_3.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTVah_3, m_vecMacroSubPanel[i].FFT_VAH_3.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTVaq_3, m_vecMacroSubPanel[i].FFT_VAQ_3.GetBuffer(0));
      strcpy(pGrmMura->m_strFFTPK_3, m_vecMacroSubPanel[i].FFT_PK_3.GetBuffer(0));
   }
   strcpy(pShared->GetGlassData()->m_strMaxAvgGray, strMaxAvgGray.GetBuffer(0));
   strcpy(pShared->GetGlassData()->m_strMaxPortion, strMaxPortion.GetBuffer(0));
   m_bReadSuccess = TRUE;
   return TRUE;
}