From 9020bfb6f86ff853d5d5b3cee882132a244232da Mon Sep 17 00:00:00 2001
From: KEJ <kimeungju@diteam.co.kr>
Date: 금, 24 11월 2023 15:33:29 +0900
Subject: [PATCH] Merge branch 'feature/#4528_CF_AOI_Review_Motor_Offset_기능_추가' into develop

---
 ReviewHistory/ReveiwHistory/MacroResultFile.cpp |  357 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 357 insertions(+), 0 deletions(-)

diff --git a/ReviewHistory/ReveiwHistory/MacroResultFile.cpp b/ReviewHistory/ReveiwHistory/MacroResultFile.cpp
new file mode 100644
index 0000000..a7caac2
--- /dev/null
+++ b/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;
+}
\ No newline at end of file

--
Gitblit v1.9.3