#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 < 31) continue;
|
MacroSubPanel.PRO_IMAGE = paser.getTokStr(20);
|
MacroSubPanel.AVG_GRAY_0 = paser.getTokStr(21);
|
MacroSubPanel.PORTION_0 = paser.getTokStr(22);
|
MacroSubPanel.AVG_GRAY_1 = paser.getTokStr(24);
|
MacroSubPanel.PORTION_1 = paser.getTokStr(25);
|
MacroSubPanel.AVG_GRAY_2 = paser.getTokStr(27);
|
MacroSubPanel.PORTION_2 = paser.getTokStr(28);
|
MacroSubPanel.AVG_GRAY_3 = paser.getTokStr(30);
|
MacroSubPanel.PORTION_3 = paser.getTokStr(31);
|
|
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));
|
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));
|
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));
|
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));
|
}
|
strcpy(pShared->GetGlassData()->m_strMaxAvgGray, strMaxAvgGray.GetBuffer(0));
|
strcpy(pShared->GetGlassData()->m_strMaxPortion, strMaxPortion.GetBuffer(0));
|
|
m_bReadSuccess = TRUE;
|
return TRUE;
|
}
|