From e147f44d605bdce9c395c1fd66a88f6cc8106350 Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 수, 30 3월 2022 16:21:38 +0900
Subject: [PATCH] no message

---
 ReviewHistory/ReveiwHistory/DitGlassRawStruct.h      |  556 ++++++++++++++++++++++++------------------
 ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp     |   46 ++
 .gitignore                                           |    4 
 ReviewSystem/ReviewSystem/DisplayMessage.cpp         |    8 
 ReviewSystem/ReviewSystem/ReviewInterface.cpp        |    2 
 ReviewSystem/ReviewSystem/CameraImageView.cpp        |    7 
 ReviewSystem/ReviewSystem/DlgAlignCamera.h           |    2 
 ReviewSystem/ReviewSystem/CameraImageView.h          |    2 
 ReviewSystem/ReviewSystem/MainFrm.cpp                |    2 
 ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp |    4 
 ReviewSystem/ReviewSystem/CameraControlAlign.h       |    4 
 ReviewSystem/ReviewSystem/CameraViewAlign.cpp        |   23 +
 ReviewSystem/ReviewSystem/CameraControlAlign.cpp     |   39 +++
 ReviewHistory/bin/ReviewHistroy.exe                  |    0 
 ReviewSystem/ReviewSystem/DlgAlignCamera.cpp         |   69 +++++
 15 files changed, 501 insertions(+), 267 deletions(-)

diff --git a/.gitignore b/.gitignore
index 3c46078..6b39cfe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -43,7 +43,6 @@
 *.manifest
 *_manifest.rc
 *.lastbuildstate
-*.def
 *.pch
 *.pdb
 *.idb
@@ -51,4 +50,5 @@
 *.res
 *.cache
 *.unsuccessfulbuild
-*.htm
\ No newline at end of file
+*.htm
+*.def
\ No newline at end of file
diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h b/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h
index e5f7a55..a269abd 100644
--- a/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h
+++ b/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h
@@ -48,33 +48,78 @@
 		memset(this, 0, sizeof(_grmGlassData));
 	}
 
+	//int
+	int			m_nCellNum;
+	int			m_nDefectNum;
+	int			m_nOriginDirection;				//{ GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 };
+	int			m_nConerCutDirection;
+	int			m_nScanCoordinateY;				//여기가 0이면 일반, 1이면 Scan방향이 y축(즉 scan방향이 단축, offline 설비 같은)
+	int			m_nGlassSizeWidth;
+	int			m_nGlassSizeHeight;
+	int			m_nVcrResultCode;
+	//결함 갯수 관리 변수
+	int			m_nDefectNumSizeSmall;
+	int			m_nDefectNumSizeMid;
+	int			m_nDefectNumSizeLarge;
+	int			m_nDefectNumSizeHuge;
+	int			m_nDefectNumSizeUltra;
+	int			m_nDefectNumLocActive;
+	int			m_nDefectNumLocPad;
+	int			m_nDefectNumLocCrack;
+	int			m_nDefectNumLocBM;
+	int			m_nDefectNumTypeTB;
+	int			m_nDefectNumTypeTW;
+	int			m_nDefectNumTypeRB;
+	int			m_nDefectNumTypeRW;
+	int			m_nDefectNumTypeMD;
+	int			m_nDefectNumTypeCD;
+	int			m_nDefectNumTypeMC;
+	int			m_nDefectNumJudgeOKWhite;
+	int			m_nDefectNumJudgeOKBlack;
+	int			m_nDefectNumJudgeNG;
+	int			m_nDefectNumJudgeRW;
+	int			m_nDefectNumJudgeRP;
+	int			m_nDefectNumJudgeRV;
+	int			m_nDefectNumJudgeTR;
+	int			m_nDefectNumJudgePR;
+	int			m_nDefectNumJudgeLine;
+	int			m_nDefectNumStackTD;
+	int			m_nDefectNumStackSD;
+	int			m_nDefectNumStackPD;
+	int			m_nDefectNumStackSP;
+	int			m_nSlot_No; 
+	int			m_nReviewNum;
+	int			m_nStackNum;
+	int			m_nCutOffDefectNum;
+	int			m_nRawMergeNum;
+	//KYH ND 판정 추가
+	int			m_nDefectNumJudgeND;
+	//DUMY DATA
+	int			Dumy_int[9];
+
+	//double
+	double		m_nAlignCcdTheta;
+	double		m_nAlignCcdShitftX;
+	double		m_nAlignCcdShitftY;
+	double		m_nAlignPreTheta;
+	double		m_nAlignPreShitftX;
+	double		m_nAlignPreShitftY;
+	double		m_nAlignBasicTheta;
+	double		m_nAlignBasicShitftX;
+	double		m_nAlignBasicShitftY;
+	//DUMY DATA
+	double		Dumy_double[10];
+
+	//char
 	//Glass 정보
 	char m_strFileName[64];
 	char m_strPath[256];
-
-	int m_nCellNum;
-	int m_nDefectNum;
-
-	int m_nOriginDirection;				//{ GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 };
-	int m_nConerCutDirection;
-	int	m_nScanCoordinateY;				//여기가 0이면 일반, 1이면 Scan방향이 y축(즉 scan방향이 단축, offline 설비 같은)
-
-	int m_nGlassSizeWidth;
-	int m_nGlassSizeHeight;
-
 	//설비정보
 	char m_strLine[32];
 	char m_strEquipType[32];			
 	char m_strEquipID[32];				
 	char m_strStepID[32];			
 	char m_strOperID[32];				
-
-	CTime	m_tmGlassLoading;			//3. START_TIME
-	CTime	m_tmInspectionStart;			//3. START_TIME
-	CTime	m_tmInspectionEND;			//4. END_TIME
-	CTime	m_tmReviewLoading;
-	CTime	m_tmReviewEnd;
-
 	//기본 물류정보
 	char m_strGlassID[32];				//Glass ID
 	char m_strPPID[32];					
@@ -85,74 +130,16 @@
 	char m_strGlassJudge[32];			//GLASS_JUDGE
 	char m_strGlassCode[32];			//Grade or Code
 	char m_strProductID[16];			//4. PRODUCT_ID
-
-	//VCR
-	int m_nVcrResultCode;
 	char m_strVCRResult[32];
 	char m_strVCRGlassID[32];
-
-
-	//결함 갯수 관리 변수
-	int			m_nDefectNumSizeSmall;
-	int			m_nDefectNumSizeMid;
-	int			m_nDefectNumSizeLarge;
-	int			m_nDefectNumSizeHuge;
-	int			m_nDefectNumSizeUltra;
-
-	int			m_nDefectNumLocActive;
-	int			m_nDefectNumLocPad;
-	int			m_nDefectNumLocCrack;
-	int			m_nDefectNumLocBM;
-
-	int			m_nDefectNumTypeTB;
-	int			m_nDefectNumTypeTW;
-	int			m_nDefectNumTypeRB;
-	int			m_nDefectNumTypeRW;
-	int			m_nDefectNumTypeMD;
-	int			m_nDefectNumTypeCD;
-	int			m_nDefectNumTypeMC;
-
-	int			m_nDefectNumJudgeOKWhite;
-	int			m_nDefectNumJudgeOKBlack;
-	int			m_nDefectNumJudgeNG;
-	int			m_nDefectNumJudgeRW;
-	int			m_nDefectNumJudgeRP;
-	int			m_nDefectNumJudgeRV;
-	int			m_nDefectNumJudgeTR;
-	int			m_nDefectNumJudgePR;
-
-	int			m_nDefectNumStackTD;
-	int			m_nDefectNumStackSD;
-	int			m_nDefectNumStackPD;
-	int			m_nDefectNumStackSP;
-
-
-	//카메라/스캔 정보 [김태현 2018/12/5]
-	short		m_nCameraNum;
-	short		m_nScanNum;
-	unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];		
-	unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
-	unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
-
 	//얼라인 정보 um[김태현 2018/12/10]
-	double	m_nAlignCcdTheta;
-	double	m_nAlignCcdShitftX;
-	double	m_nAlignCcdShitftY;
-	double	m_nAlignPreTheta;
-	double	m_nAlignPreShitftX;
-	double	m_nAlignPreShitftY;
-	double	m_nAlignBasicTheta;
-	double	m_nAlignBasicShitftX;
-	double	m_nAlignBasicShitftY;
 	char	m_strAlignFirst[64];
 	char	m_strAlignSecond[64];
 // 	char	m_strAlignPath[256];
-
 	//CSOT용 물류 정보 [김태현 2018/12/5]
 	char m_strCassetteSequenceNo[16];
 	char m_strOwnerCode[16];			//2. OWNER_CODE
 	char m_strOwnerType[16];			//3. OWNER_TYPE
-
 	char m_strProcessID[21];			//5. PROCESS_ID
 	char m_strProductGroup[16];			//6. PRODUCT_GROUP
 	char m_strCSTID[16];				//8. CST_ID
@@ -162,7 +149,6 @@
 	char m_strPreRecipeID[32];			//13.PRE_RECIPE_ID
 	char m_strGroupID[16];				//14.GROUP_ID
 	char m_cAutoSampleFlag;				//15.AUTOSAMPLEFLAG
-
 	// CPRJ용 물류 정보
 	char m_strProdType[3];
 	char m_strBatchID[13];
@@ -175,35 +161,53 @@
 	char m_strFlowHistory[2];
 	char m_strCount1[2];
 	char m_strCount2[2];
-
 	//Mura Data 0412 nwh
 	char m_strMaxAvgGray[12];
 	char m_strMaxPortion[12];
-
-
-     //1226NWH
-	char m_strReadingFlag[2]; 
-	BYTE m_nUniqueID[4];
-	int m_nSlot_No; 
-
-	BYTE m_nGlassDataBitSignal[4];
-	bool m_bJob_end;  
-
-	//201217 CJH - 찍은 Defect Review 개수
-	int m_nReviewNum;
-	//201221 CJH - 파싱한 Stack 결과
-	int m_nStackNum;
-	BOOL m_bStackRead;
-
-	int m_nRawMergeNum;
-	BOOL m_bRawMergeRead;
-	//210203 CJH - CutOff 대상 결함 수
-	int m_nCutOffDefectNum;
-	//210323 CJH - Server/Frame Shrink 정보 추가
 	char m_strShrinked[6];
-	//210326 CJH - RAW 입력 Defect 수량 상한 사용여부
-	BOOL m_bRawCutoff;
+	char m_strReadingFlag[2]; 
+	char m_StrMergeList[10][12];
+	//DUMY DATA
+	char m_strRawMergeStepID[32];
+	char Dumy_char[104]; 
 
+	//unsigned char
+	unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];		
+	unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
+	unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
+	//DUMY DATA
+	unsigned char Dumy_unsigned_char[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
+
+	//CTime
+	CTime	m_tmGlassLoading;			//3. START_TIME
+	CTime	m_tmInspectionStart;			//3. START_TIME
+	CTime	m_tmInspectionEND;			//4. END_TIME
+	CTime	m_tmReviewLoading;
+	CTime	m_tmReviewEnd;
+	//DUMY DATA
+	CTime	Dumy_CTime[10];
+
+	//short
+	short		m_nCameraNum;
+	short		m_nScanNum;
+	//DUMY DATA
+	short		Dumy_short[10];
+
+	//BYTE
+	BYTE m_nUniqueID[4];
+	BYTE m_nGlassDataBitSignal[4];
+	//DUMY DATA
+	BYTE Dumy_BYTE[10];
+
+	//BOOL
+	BOOL m_bJob_end;
+	BOOL m_bStackRead;
+	BOOL m_bRawMergeRead;
+	BOOL m_bRawCutoff;
+	BOOL m_bEdgeCrackUse;
+	BOOL m_bRawMergeUse;
+	//DUMY DATA
+	BOOL Dumy_BOOL[9];
 };
 struct _grmBlockData
 {
@@ -211,10 +215,12 @@
 	{
 		memset(this, 0, sizeof(_grmBlockData));
 	}
+	//char
 	char m_strBlockID[16];				//1. BLOCK_ID
 	char m_cBlockJudgeAOI;				//2. BLOCK_JUDGE_AOI
 	char m_cBlockJudgeATS;				//4. BLOCK_JUDGE_ATS
 	char m_cBlockJudgeTEG;				//5. BLOCK_JUDGE_TEG
+	//int
 	int m_nGlassIdDCR;					//22. GLASS_ID_DCR
 };
 struct _grmCellData
@@ -224,32 +230,27 @@
 		memset(this, 0, sizeof(_grmCellData));
 	}
 	int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; };
-	int						m_nCellID;							//1. PANEL_ID
-	short					m_nModelIdx;				// 몇 번째 모델인가?
 
-	char					m_strCellName[32];
-	int						m_rectCellLeft;
-	int						m_rectCellTop;
-	int						m_rectCellRight;
-	int						m_rectCellBottom;
-
-	int/*Judgement*/		m_nJudgement;
-	int						m_nJudgeFlag;
-	int						m_nJudgeGlade;
-
-
+	//int
+	int			m_nCellID;							//1. PANEL_ID
+	int			m_rectCellLeft;
+	int			m_rectCellTop;
+	int			m_rectCellRight;
+	int			m_rectCellBottom;
+	/*Judgement*/
+	int			m_nJudgement;
+	int			m_nJudgeFlag;
+	int			m_nJudgeGlade;
 	//결함 갯수 관리 변수
 	int			m_nDefectNumSizeSmall;
 	int			m_nDefectNumSizeMid;
 	int			m_nDefectNumSizeLarge;
 	int			m_nDefectNumSizeHuge;
 	int			m_nDefectNumSizeUltra;
-
 	int			m_nDefectNumLocActive;
 	int			m_nDefectNumLocPad;
 	int			m_nDefectNumLocCrack;
 	int			m_nDefectNumLocBM;
-
 	int			m_nDefectNumTypeTB;
 	int			m_nDefectNumTypeTW;
 	int			m_nDefectNumTypeRB;
@@ -257,7 +258,38 @@
 	int			m_nDefectNumTypeMD;
 	int			m_nDefectNumTypeCD;
 	int			m_nDefectNumTypeMC;
+	int			m_nDefectNumJudgeOKWhite;
+	int			m_nDefectNumJudgeOKBlack;
+	int			m_nDefectNumJudgeNG;
+	int			m_nDefectNumJudgeRW;
+	int			m_nDefectNumJudgeRP;
+	int			m_nDefectNumJudgeRV;
+	int			m_nDefectNumJudgeTR;
+	int			m_nDefectNumJudgePR;
+	int			m_nDefectNumJudgeLine;
+	int			m_nReflowResult[8];			// 0: Reflow X 1: Reflow OK 2: Reflow NG
+	// Filtering된 Stack별 수
+	int			m_nDefectTDCount;
+	int			m_nDefectSDCount;
+	int			m_nDefectPDCount;
+	int			m_nDefectSPCount;
+	// Gate/Data 총 갯수
+	int			m_nGateNum;
+	int			m_nDataNum;
+	// 210129 CJH - Cell Origin 방향
+	int			m_nCellXDir;
+	int			m_nCellYDir;
+	//KYH ND 판정 추가
+	int			m_nDefectNumJudgeND;
+	//DUMY DATA
+	int			Dumy_int[9];
 
+	//double
+	//DUMY DATA
+	double			Dumy_double[10];
+
+	//char
+	char		m_strCellName[32];
 	//Mura Data nwh 0404 
 	char		m_strProImage[32];
 	char		m_strAvgGray_0[12];
@@ -269,7 +301,6 @@
 	char		m_strFFTVah_0[12];
 	char		m_strFFTVaq_0[12];
 	char		m_strFFTPK_0[12];
-
 	char		m_strAvgGray_1[12];
 	char		m_strPortion_1[12];
 	//kyh Mura Data 추가 0622
@@ -279,7 +310,6 @@
 	char		m_strFFTVah_1[12];
 	char		m_strFFTVaq_1[12];
 	char		m_strFFTPK_1[12];
-
 	char		m_strAvgGray_2[12];
 	char		m_strPortion_2[12];
 	//kyh Mura Data 추가 0622
@@ -289,7 +319,6 @@
 	char		m_strFFTVah_2[12];
 	char		m_strFFTVaq_2[12];
 	char		m_strFFTPK_2[12];
-
 	char		m_strAvgGray_3[12];
 	char		m_strPortion_3[12];
 	//kyh Mura Data 추가 0622
@@ -299,31 +328,28 @@
 	char		m_strFFTVah_3[12];
 	char		m_strFFTVaq_3[12];
 	char		m_strFFTPK_3[12];
+	//DUMY DATA
+	char		Dumy_char[256];
 
-	int			m_nDefectNumJudgeOKWhite;
-	int			m_nDefectNumJudgeOKBlack;
-	int			m_nDefectNumJudgeNG;
-	int			m_nDefectNumJudgeRW;
-	int			m_nDefectNumJudgeRP;
-	int			m_nDefectNumJudgeRV;
-	int			m_nDefectNumJudgeTR;
-	int			m_nDefectNumJudgePR;
+	//unsigned char
 
-	int			m_nReflowResult[8];			// 0: Reflow X 1: Reflow OK 2: Reflow NG
+	//CTime
 
-	// Filtering된 Stack별 수
-	int			m_nDefectTDCount;
-	int			m_nDefectSDCount;
-	int			m_nDefectPDCount;
-	int			m_nDefectSPCount;
+	//short
+	short		m_nModelIdx;				// 몇 번째 모델인가?
+	//DUMY DATA
+	short		Dumy_short[10];
 
-	// Gate/Data 총 갯수
-	int			m_nGateNum;
-	int			m_nDataNum;
+	//BYTE
+	//DUMY DATA
+	BYTE		Dumy_BYTE[10];
 
-	// 210129 CJH - Cell Origin 방향
-	int			m_nCellXDir;
-	int			m_nCellYDir;
+	//BOOL
+	//DUMY DATA
+	BOOL		Dumy_BOOL[10];
+
+
+
 };
 
 struct _grmDefectReviewData
@@ -333,46 +359,64 @@
 		memset(this, 0, sizeof(_grmDefectReviewData));
 	}
 
-	//////////////////////////////////////////////////////////////////////////
-	//여기서 부터 리뷰 영역 [김태현 2019/1/19]
 	ditRaw::ReviewPlanType			m_nPlanType	;	
+	//int
 	int			m_nResultCode;  //0:None, 1:Success
 	int			m_nShotIndex; //리뷰 찍은 순번 [김태현 2018/12/5]
 	int			m_nModuleIndex;
 	int			m_nMagnificIndex;
-	float		m_fManification;
-	float		m_fManificResoultion;
-	char		m_strRevImageName[256];
-	char		m_strRevImagePath[256];
-
-	//////////////////////////////////////////////////////////////////////////
-	// Measure 영역
 	int			m_nMeasure_Index;
 	int			m_nMeasure_ResultCode; //0:None, 1:Success
-	float		m_fMesure_ResultData[8];	// 0:Type, 1:ShiftX, 2:ShiftY
-
-	//////////////////////////////////////////////////////////////////////////
-	// WSI영역
 	int			m_nWsi_ResultCode; //0:None, 1:Success
 	int			m_nWsi_Type;									// 함몰 / 돌기
-	float		m_fWsi_ResultData[8];			// 0:Type, 1:Height(um), 2:Width
-	char		m_strWsi_2DImageFilename[256];
-	char		m_strWsi_3DImageFilename[256]; 
 	int			m_nWsiReflowPositionIndex;					// WsiReflowPositionIndex
 	int			m_nWsi_pReflowResultData[8];
-	double		m_dWsi_DamDistance;
-
-	double		m_dWsiMmMotorX;								// WSI 모터 좌표 20180223 HJH
-	double		m_dWsiMmMotorY;
-	float		m_fWsiManification;							// WSI 배율
-
-	//////////////////////////////////////////////////////////////////////////
-	// Reflow 영역	
 	int			m_nReflow_Index;
 	int			m_nReflow_ResultCode; //0:None, // 검출한 Line의 개수. 3 미만 : DAM2 Reflow 판정, 4~5 : DAM1 Reflow 판정, 6 : no Reflow 판정 / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side
-	float		m_fReflow_LinePosData[8];	
 	int			m_nReflow_Side;
 	int			m_nReflow_InspectionMode;
+	//DUMY DATA
+	int			Dumy_int[10];
+
+	//double
+	double		m_dWsi_DamDistance;
+	double		m_dWsiMmMotorX;								// WSI 모터 좌표 20180223 HJH
+	double		m_dWsiMmMotorY;
+	//DUMY DATA
+	double		Dumy_double[10];
+
+	//char
+	char		m_strRevImageName[256];
+	char		m_strRevImagePath[256];
+	char		m_strWsi_2DImageFilename[256];
+	char		m_strWsi_3DImageFilename[256]; 
+	//DUMY DATA
+	char		Dumy_char[256];
+
+	//unsigned char
+
+	//CTime
+
+	//short
+
+	//BYTE
+	//DUMY DATA
+	BYTE Dumy_BYTE[10];
+
+	//BOOL
+	//DUMY DATA
+	BOOL Dumy_BOOL[10];
+
+	//float
+	float		m_fManification;
+	float		m_fManificResoultion;
+	float		m_fMesure_ResultData[8];	// 0:Type, 1:ShiftX, 2:ShiftY
+	float		m_fWsi_ResultData[8];			// 0:Type, 1:Height(um), 2:Width
+	float		m_fWsiManification;							// WSI 배율
+	float		m_fReflow_LinePosData[8];	
+	//DUMY DATA
+	float		Dumy_float[10];
+
 };
 
 struct _grmDefectData
@@ -382,20 +426,81 @@
 		memset(this, 0, sizeof(_grmDefectData));
 	}
 
+	_grmDefectReviewData m_ReviewDefect;
+
+	//int
+	int				m_nDefectIdx;				// 카메라에서의 결함 인덱스 201207 CJH - 자릿 수 넘침. int형으로 변경
+	int				m_nPixelConv;				// pixel 단위 좌표
+	int				m_nPixelScan;				// pixel 단위 좌표
+	int				m_nDefectRScale;			// 픽셀단위 결함 높이	-------------------------RS
+	int				m_nPixelGlassStart;			// Glass 시작 픽셀
+	int				m_nUMOriginX;				// um단위 x좌표 (원점기준)
+	int				m_nUMOriginY;				// um단위 y조표 (원점기준)
+	int				m_nUMCenterAlignX;			// um단위 X좌표 (Glass Center 기준, 얼라인보정 후)
+	int				m_nUMCenterAlignY;			// um단위 Y좌표 (Glass Center 기준, 얼라인보정 후)
+	int				m_nUMCenterX;				// um단위 X좌표 (Glass Center 기준, 얼라인보정 전)
+	int				m_nUMCenterY;				// um단위 Y좌표 (Glass Center 기준, 얼라인보정 전)
+	int				m_nUMSizeX;					// um단위 X 크기	-----------------------------UX
+	int				m_nUMSizeY;					// um단위 Y 크기	-----------------------------UY
+	int				m_nUMSize;					// um단위 크기.
+	int				m_nPadRegionIdx;			// PAD 영역 인덱스
+	int				m_nUMCellX;					// 셀 원점 기준 x 좌표
+	int				m_nUMCellY;					// 셀 원점 기준 y 좌표
+	int				m_nUMShotX;					// 샷 기준 X좌표
+	int				m_nUMShotY;					// 샷 기준 Y좌표
+	int				m_StackInfo;				// Stack Flag
+	int				m_ClassificationType;				// enum ClassificationType			{ ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI나 TFE등 추가 분류  알고리즘 적용 결과.
+	int				m_nAtomWidth;				// TFE 핵 너비
+	int				m_nAtomHeight;				// TFE 핵 높이
+	int				m_nDefectMerge;		// 현재 디펙의 머지 여부
+	int				m_nPixelSizeOrigin;
+	int				m_nScratchRatio;
+	int				m_nDensity;			// 원형 결함 구분을 위한 밀도 [2017.8.2 bhs]
+	int				m_nAngle;					// 각도
+	int				m_nMajor;					// 장축 길이(Long)
+	int				m_nMinor;					// 단축 길이(Short)
+	int				m_nCompact;					// Blob 장축을 지름으로 하는 원의 넓이와 Blob 넓이의 비율
+	int				m_nThickness;				// Blob 넓이와 장축의 비율 (Area / Major)
+	int				m_nHliLayers;				// 해당결함에 포함된 레이어 bit처리
+	int				m_nAlignRectLeft;
+	int				m_nAlignRectTop;
+	int				m_nAlignRectBottom;
+	int				m_nAlignRectRight;
+	//DUMY DATA
+	int				Dumy_int[10];
+
+	//double
+	double			m_dScanResolution;
+	double			m_dConvResolution;
+	//DUMY DATA
+	double			Dumy_double[10];
+
+	//char
+	char			m_strStackFirst[60];			// Stack Step. //201221 CJH - 최대 사이즈 60bytes
+	char			m_strUnitID[16];				// 유닛아이디
+	char			m_strDefectCode[32];			// Defect Code
+	char			m_strAoiImageName[256];			// Defect Image Name(CCD Image)
+	char			m_strDefectName[16];
+	char			m_strDefectType[16];
+	char			m_strAoiImagePath[255];
+	char			m_strReviewImagePath[255];
+	char			m_strLNDefectCode[12];
+	//DUMY DATA
+	char			 Dumy_char[256];
+
+	//unsigned char
+
+	//CTime
+
+	//short
 	short			m_nDefectID;
 	short			m_nCameraID;
 	short			m_nScanIdx;
 	//short			m_nDefectIdx;				// 카메라에서의 결함 인덱스
-	int				m_nDefectIdx;				// 카메라에서의 결함 인덱스 201207 CJH - 자릿 수 넘침. int형으로 변경
-
-	int				m_nPixelConv;				// pixel 단위 좌표
-	int				m_nPixelScan;				// pixel 단위 좌표
-
 	short							m_nPixelSize;				// 결함크기		---------------------------------PS
 	short/*SERVER_DefectType*/		m_DefectType;				// 결함 타입	---------------------------------DT
 	short/*SERVER_DefectSubType*/	m_DefectSubType;			// 결함의 판정상태.
 	short/*SERVER_DefectBDType*/	m_DefectBDType;				// 결함 타입 - Bright, Dark, Both
-
 	short			m_sPixelWidth;				// 픽셀단위 결함 너비
 	short			m_sPixelHeight;				// 픽셀단위 결함 높이
 	short			m_nLevelSrcMin;				// 결함 밝기 Min	-----------------------------SN
@@ -407,114 +512,62 @@
 	short			m_nLevelDiffMin;			// 비교차 Min	---------------------------------DN
 	short			m_nLevelDiffMax;			// 비교차 Max	---------------------------------DX
 	short			m_nLevelDiffAvg;			// 비교차 Avg	---------------------------------DA
-
-	int				m_nDefectRScale;			// 픽셀단위 결함 높이	-------------------------RS
 	short			m_sThreshold;				// 결함을 검출할 때의 Threshold
 	short			m_sThresholdAvg;			// 결함을 검출할 때의 Threshold AVG
 	short			m_sDefectPeak;				// 결함의 Peak.
 	short			m_sDefectLevel;				// (DiffAvg - Th) BOE 8G 요청사항
-
-	int				m_nPixelGlassStart;			// Glass 시작 픽셀
 	short			m_sDefectLoc;
-
 	short			m_sZoneClassPixelCount[16];
 	short			m_sZonePixelCount[16];	// Zone별 결함 Pixel 수
 	short			m_sZoneValueMin[16];	// Zone별 결함 Min
 	short			m_sZoneValueMax[16];	// Zone별 결함 Max
 	short			m_sZoneValueAvg[16];	// Zone별 결함 Avg
 	short			m_sZonePixelPercent[16];	// --------------------------------------Z0~ZF
-
 	//210127 CJH - Zone별 Source Gray 입력
 	short			m_sZoneValueSrcMin[16];	// Zone별 Source Min
 	short			m_sZoneValueSrcMax[16];	// Zone별 Source Max
 	short			m_sZoneValueSrcAvg[16]; // Zone별 Source Avg
-
-	int				m_nUMOriginX;				// um단위 x좌표 (원점기준)
-	int				m_nUMOriginY;				// um단위 y조표 (원점기준)
-	int				m_nUMCenterAlignX;			// um단위 X좌표 (Glass Center 기준, 얼라인보정 후)
-	int				m_nUMCenterAlignY;			// um단위 Y좌표 (Glass Center 기준, 얼라인보정 후)
-	int				m_nUMCenterX;				// um단위 X좌표 (Glass Center 기준, 얼라인보정 전)
-	int				m_nUMCenterY;				// um단위 Y좌표 (Glass Center 기준, 얼라인보정 전)
-	int				m_nUMSizeX;					// um단위 X 크기	-----------------------------UX
-	int				m_nUMSizeY;					// um단위 Y 크기	-----------------------------UY
-	int				m_nUMSize;					// um단위 크기.
-	CRect			m_RectUM;					// 디펙 센터 기준 사각형.
-
 	short/*SERVER_DefectSizeType*/	m_DefectSizeType;			// 결함 크기 종류enum SERVER_DefectSizeType		{ SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra };
 	short/*SERVER_DefectPeakType*/	m_DefectPeakType;			// Peak의 종류.
 	short/*Judgement*/				m_DefectJudgement;			// 결함 판정.
-	BOOL					m_bDefectCutoff;			// 컷 오프 디펙(TRUE= Cutoff, FALSE)
-	short/*MAP16_DefectClass*/		m_DefectClass;				// BOE Defect Class 16등분 구분
-	int				m_nPadRegionIdx;			// PAD 영역 인덱스
-
-	int				m_nUMCellX;					// 셀 원점 기준 x 좌표
-	int				m_nUMCellY;					// 셀 원점 기준 y 좌표
 	short			m_nModelIdx;				// 몇 번째 모델인가?
 	short			m_nCellIdx;					// 몇번째 셀인가?
 	short			m_nCellGate;				// 셀별 Gate라인(얼라인 보정 전)
 	short			m_nCellData;				// 셀별 Data라인(얼라인 보정 전)
 	short			m_nCellGateAlign;			// 셀별 Gate라인(얼라인 보정 후)
 	short			m_nCellDataAlign;			// 셀별 Data라인(얼라인 보정 후)
-
-	int				m_nUMShotX;					// 샷 기준 X좌표
-	int				m_nUMShotY;					// 샷 기준 Y좌표
+	short/*MAP16_DefectClass*/		m_DefectClass;				// BOE Defect Class 16등분 구분
 	short			m_nMaskDefectIdx;			// 한 Glass에서 발견된 마스크결함 묶음의 인덱스.
 	short			m_nShotIdx;					// 노광샷 번호
 	short			m_nMatchShotCount;			// 동일한 마스크 결함의 수.
 	short			m_nMatchMaxSize;			// 동일한 마스크 중 가장 큰 결함의 크기.
-
 	short			m_nRepeatCount;				// 연속결함발견위한 동일좌표 반복수
 	short			m_nMaskRepeatCount;
-	int				m_StackInfo;				// Stack Flag
-	BOOL			m_bRealStack;				// Stack 머지에 의한 TD(TRUE) 인지, 필터링에 의한 TD(FALSE)구분할 수 있다.
 	short			m_nStackStepCount;			// Stack 수
 	short			m_nStackColorIdx;			// Color를 선택하는 인덱스.
-	//CString			m_strStackStep[CFDEFECT_STACKCOUNT];			// Stack Step.
-	char			m_strStackFirst[60];			// Stack Step. //201221 CJH - 최대 사이즈 60bytes
-	char			m_strUnitID[16];				// 유닛아이디
-
-	int				m_ClassificationType;				// enum ClassificationType			{ ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI나 TFE등 추가 분류  알고리즘 적용 결과.
-	int				m_nAtomWidth;				// TFE 핵 너비
-	int				m_nAtomHeight;				// TFE 핵 높이
 	short/*ReKind*/			m_DefectKind;				// 결함 종류
-
-	char			m_strDefectCode[32];			// Defect Code
-	BOOL			m_bMergeState;				// Merge Status
-	char			m_strAoiImageName[256];			// Defect Image Name(CCD Image)
-	int				m_nDefectMerge;		// 현재 디펙의 머지 여부
-
-
-	int				m_nPixelSizeOrigin;
-	int				m_nScratchRatio;
-	int				m_nDensity;			// 원형 결함 구분을 위한 밀도 [2017.8.2 bhs]
-
-	char			m_strDefectName[16];
-	char			m_strDefectType[16];
-
-	double			m_dScanResolution;
-	double			m_dConvResolution;
-
-	int				m_nAngle;					// 각도
-	int				m_nMajor;					// 장축 길이(Long)
-	int				m_nMinor;					// 단축 길이(Short)
-	int				m_nCompact;					// Blob 장축을 지름으로 하는 원의 넓이와 Blob 넓이의 비율
-	int				m_nThickness;				// Blob 넓이와 장축의 비율 (Area / Major)
-	
 	short			m_nHliLevelIdx;				// 몇 번째 레벨(채널)인가?
-	int				m_nHliLayers;				// 해당결함에 포함된 레이어 bit처리
+	short/*LineDefectType*/ m_LineDefectType;
+	//DUMY DATA
+	short			Dumy_short[100];
 
+	//BYTE
+	//DUMY DATA
+	BYTE Dumy_BYTE[10];
+
+	//BOOL
+	BOOL			m_bDefectCutoff;			// 컷 오프 디펙(TRUE= Cutoff, FALSE)
+	BOOL			m_bRealStack;				// Stack 머지에 의한 TD(TRUE) 인지, 필터링에 의한 TD(FALSE)구분할 수 있다.
+	BOOL			m_bMergeState;				// Merge Status
 	BOOL			m_bShrinked;				//210323 CJH - Frame Shrink 정보 추가
+	//DUMY DATA
+	BOOL Dumy_BOOL[10];
 
-	char			m_strAoiImagePath[255];
-	char			m_strReviewImagePath[255];
+	//float
 
-	int				m_nAlignRectLeft;
-	int				m_nAlignRectTop;
-	int				m_nAlignRectBottom;
-	int				m_nAlignRectRight;
-
-
-	_grmDefectReviewData m_ReviewDefect;
+	//CRect
+	CRect			m_RectUM;					// 디펙 센터 기준 사각형.
+	//CString			m_strStackStep[CFDEFECT_STACKCOUNT];			// Stack Step.
 };
 
 
@@ -560,13 +613,14 @@
 {
 	//공유 메모리 생성할 공간 결정 [김태현 2018/11/12]
 	size_t m_nGlassRawDataSize;
+
+	//int 
 	int m_nGlassMaxDataNum;
 	int m_nBlockMaxDataNum;
 	int m_nCellMaxDataNum;
 	int m_nDefectMaxDataNum;
 	int m_nStackMaxDataNum;
 	int m_nRawMergeMaxDataNum;
-
 	//Char 기준 자료가 있는 시작 위치 [김태현 2018/11/12]
 	int m_nGlassDataPoint;
 	int m_nBlockDataPoint;
@@ -574,13 +628,14 @@
 	int m_nDefectDataPoint;
 	int m_nStackDataPoint;
 	int m_nRawMergeDataPoint;
-
 	int m_nSizeOfGlassData;
 	int m_nSizeOfBlockData;
 	int m_nSizeOfCellData;
 	int m_nSizeOfDefectData;
 	int m_nSizeOfStackData;
 	int m_nSizeOfRawMergeData;
+	//DUMY DATA
+	int			Dumy_int[10];
 };
 struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand
 {
@@ -727,24 +782,37 @@
 
 	size_t m_nGlassRawDataSize;
 
+	//int
 	int m_nGlassMaxDataNum;
 	int m_nBlockMaxDataNum;
 	int m_nCellMaxDataNum;
 	int m_nDefectMaxDataNum;
 	int m_nStackMaxDataNum;
-
 	int m_nGlassDataPoint;
 	int m_nBlockDataPoint;
 	int m_nCellDataPoint;
 	int m_nDefectDataPoint;
 	int m_nStackDataPoint;
-
 	int m_nSizeOfGlassData;
 	int m_nSizeOfBlockData;
 	int m_nSizeOfCellData;
 	int m_nSizeOfDefectData;
 	int m_nSizeOfStackData;
 
+	//DUMY DATA
+	int			Dumy_int[10];
+	//DUMY DATA
+	double		Dumy_double[10];
+	//DUMY DATA
+	char		Dumy_char[256];
+	//DUMY DATA
+	short		Dumy_short[10];
+	//DUMY DATA
+	BYTE		Dumy_BYTE[10];
+	//DUMY DATA
+	BOOL		Dumy_BOOL[10];
+
 private:
+	//bool
 	bool m_bRefAlloc;
 };
\ No newline at end of file
diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
index 3c34066..955dff9 100644
--- a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
+++ b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
@@ -928,7 +928,11 @@
 					//ImageShow(pDefectInfo->m_nDefectID);
 					if (!m_bDefectAll)
 					{
-						ImageShow(pDispInfo->item.row - 1);
+						/*< LYW 20211221 - #5000 ADD Start >*/
+						ImageShow(pDefectInfo->m_nDefectID);
+						/*< LYW 20211221 - #5000 ADD End >*/
+						//origin
+						//ImageShow(pDispInfo->item.row - 1);
 					}
 					else
 					{
@@ -938,12 +942,15 @@
 					//�젙�젹 �닚�꽌瑜� �궗�슜�옄媛� �썝�븯�뒗 �닚�쑝濡� �븯�옄
 					if (!m_bDefectAll)
 					{
-						m_sldImg.SetPos(pDispInfo->item.row - 1);
-						
-						int nPos = m_sldImg.GetPos();
-						CString strPos;
-						strPos.Format(_T("%d"), nPos);
-						m_ctrCount.SetWindowText(strPos);
+						/*< LYW 20211221 - #5000 Delete Start >*/
+
+// 						m_sldImg.SetPos(pDispInfo->item.row - 1);
+// 						
+// 						int nPos = m_sldImg.GetPos();
+// 						CString strPos;
+// 						strPos.Format(_T("%d"), nPos);
+// 						m_ctrCount.SetWindowText(strPos);
+						/*< LYW 20211221 - #5000 Delete End >*/
 					}
 				}
 			}
@@ -1232,7 +1239,11 @@
 		{
 			if (m_Formation.m_vecImage[i].m_nDefectID == nSelectDefect)
 			{
-				ImageShow(i);
+				/*< LYW 20211221 - #5000 ADD Start >*/
+				ImageShow(nSelectDefect);
+				/*< LYW 20211221 - #5000 ADD End >*/
+				//origin
+				//ImageShow(i);
 				break;
 			}
 		}
@@ -2150,8 +2161,16 @@
 
 		if (!m_bDefectAll)
 		{
-			nIndex = nDefectID;
-			break;
+			/*< LYW 20211221 - #5000 ADD Start >*/
+			if (pImage->m_nDefectID == nDefectID)
+			{
+				nIndex = i;
+				break;
+			}
+			/*< LYW 20211221 - #5000 ADD End >*/
+			//Origin
+// 			nIndex = nDefectID;
+// 			break;
 		}
 		else
 		{
@@ -2397,8 +2416,11 @@
 		_akReviewList* pImageInfo = &m_Formation.m_vecImage[nPos];
 
 		m_FormationMap.setSelectDefect(pImageInfo->m_nDefectID);
-		//ImageShow(pImageInfo->m_nDefectID/*nPos*/);
-		ImageShow(nPos);
+		/*< LYW 20211221 - #5000 ADD Start >*/
+		ImageShow(pImageInfo->m_nDefectID/*nPos*/);
+		/*< LYW 20211221 - #5000 ADD End >*/
+		//Origin
+		//ImageShow(nPos);
 		setDefectShow(pImageInfo->m_nDefectID, 1);
 	}
 }
diff --git a/ReviewHistory/bin/ReviewHistroy.exe b/ReviewHistory/bin/ReviewHistroy.exe
index 0880ee3..16d97ba 100644
--- a/ReviewHistory/bin/ReviewHistroy.exe
+++ b/ReviewHistory/bin/ReviewHistroy.exe
Binary files differ
diff --git a/ReviewSystem/ReviewSystem/CameraControlAlign.cpp b/ReviewSystem/ReviewSystem/CameraControlAlign.cpp
index 9196ac2..8e2f5d0 100644
--- a/ReviewSystem/ReviewSystem/CameraControlAlign.cpp
+++ b/ReviewSystem/ReviewSystem/CameraControlAlign.cpp
@@ -19,6 +19,8 @@
 	m_pVectorAlignLightControl = NULL;
 	m_nViewMode = 0;
 	m_strSaveImageBasePath = _T("");
+	m_strSaveImageOKPath = _T("");
+	m_strSaveImageNGPath = _T("");
 
 	m_nAlignType = FALSE;
 
@@ -444,6 +446,16 @@
 	m_strSaveImageBasePath = strPath;
 }
 
+void CCameraControlAlign::SetSaveImageOKPath(CString strPath)
+{
+	m_strSaveImageOKPath = strPath;
+}
+
+void CCameraControlAlign::SetSaveImageNGPath(CString strPath)
+{
+	m_strSaveImageNGPath = strPath;
+}
+
 CCameraControl* CCameraControlAlign::GetCameraControl(int nCameraIndex)
 {
 	for (VectorCameraControlIt it=m_vecCameraControl.begin(); it!=m_vecCameraControl.end(); it++)
@@ -764,6 +776,33 @@
 		m_AlignResult.strAlignSecond = strPath;
 	}
 
+	if (m_AlignResult.nFindAlign[nCameraIdx] == 1)
+	{
+		CreateDirectory(m_strSaveImageOKPath, NULL);
+		// save threshold image
+		strPath.Format(_T("%s\\Cam%02d_Align_OK_TH_%04d%02d%02d%02d%02d%02d.jpg"), m_strSaveImageOKPath, nCameraIdx,
+			time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
+		pAlignFinder->SaveThresholdImage(strPath);
+
+		// save Result Image 20210208 �뼹�씪�씤 寃곌낵 ���옣
+		strPath.Format(_T("%s\\Cam%02d_AlignResultOK_%04d%02d%02d%02d%02d%02d.jpg"), m_strSaveImageOKPath, nCameraIdx,
+			time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
+		pAlignFinder->SaveResultImage(strPath);
+	}
+
+	else
+	{
+		CreateDirectory(m_strSaveImageNGPath, NULL);
+		// save threshold image
+		strPath.Format(_T("%s\\Cam%02d_Align_NG_TH_%04d%02d%02d%02d%02d%02d.jpg"), m_strSaveImageNGPath, nCameraIdx,
+			time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
+		pAlignFinder->SaveThresholdImage(strPath);
+
+		// save Result Image 20210208 �뼹�씪�씤 寃곌낵 ���옣
+		strPath.Format(_T("%s\\Cam%02d_AlignResultNG_%04d%02d%02d%02d%02d%02d.jpg"), m_strSaveImageNGPath, nCameraIdx,
+			time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
+		pAlignFinder->SaveResultImage(strPath);
+	}
 
 	// update matching image
 	pAlignFinder->GetBlobImage(pCameraImage->GetImageData(View_Matching));
diff --git a/ReviewSystem/ReviewSystem/CameraControlAlign.h b/ReviewSystem/ReviewSystem/CameraControlAlign.h
index eacb9cd..a3a4324 100644
--- a/ReviewSystem/ReviewSystem/CameraControlAlign.h
+++ b/ReviewSystem/ReviewSystem/CameraControlAlign.h
@@ -142,6 +142,8 @@
 	BOOL GetResultImage(int nCameraIndex, CCHImageData* pImageData);
 	BOOL SaveResultImage(int nCameraIndex, const CString& strFilename);
 	void SetSaveImageBasePath(CString strPath);
+	void SetSaveImageOKPath(CString strPath);
+	void SetSaveImageNGPath(CString strPath);
 	void SetAlignType(BOOL nAlignType);
 	//#3357 KYH Align Image 珥덇린�솕 ADD START
 	void SetAlignClearImage(); 
@@ -193,6 +195,8 @@
 	int							m_nProcessStatus;
 	int							m_nViewMode;
 	CString						m_strSaveImageBasePath;
+	CString						m_strSaveImageOKPath;
+	CString						m_strSaveImageNGPath;
 	CAlignRecipe				m_AlignRecipe;
 	CAlignResult				m_AlignResult; 
 	VectorAutoLightControl		m_vecAutoLightControl;
diff --git a/ReviewSystem/ReviewSystem/CameraImageView.cpp b/ReviewSystem/ReviewSystem/CameraImageView.cpp
index 2f72f7f..edbb66d 100644
--- a/ReviewSystem/ReviewSystem/CameraImageView.cpp
+++ b/ReviewSystem/ReviewSystem/CameraImageView.cpp
@@ -28,9 +28,12 @@
 	m_rtClientRect	= CRect(0,0,0,0);
 	m_bDrawCenterLine = FALSE;
 	m_bDrawRuler		= FALSE;
-	m_bDrawViewName = FALSE;
+	m_bDrawViewName = TRUE;
 	m_nViewBand		= BandTypeColor;
 	m_nDrawMode		= 1;
+
+	d_MatchingRate = 0.;
+	d_FindScore = 0.;
 
 	m_dWidthScale	= 1.0; 
 	m_dHeightScale	= 1.0;
@@ -619,7 +622,7 @@
 
 	// Do something with the font just created...
 	CFont* def_font = pDC->SelectObject(&font);
-	pDC->SetTextColor(RGB(255,255,255));
+	//pDC->SetTextColor(RGB(255,255,255));
 	pDC->SetBkMode(TRANSPARENT);
 
 	int nStrLength = (m_strViewName.GetLength() * 10);
diff --git a/ReviewSystem/ReviewSystem/CameraImageView.h b/ReviewSystem/ReviewSystem/CameraImageView.h
index dfcea76..03352d2 100644
--- a/ReviewSystem/ReviewSystem/CameraImageView.h
+++ b/ReviewSystem/ReviewSystem/CameraImageView.h
@@ -34,6 +34,8 @@
 	DECLARE_DYNAMIC(CCameraImageView)
 
 public:
+	double d_MatchingRate;
+	double d_FindScore;
 	CCameraImageView(CWnd *pParentWnd);
 	virtual ~CCameraImageView();
 	void SetCIV2P(ICameraImageView2Parent* pCIV2P)		{ m_pCIV2P = pCIV2P; }
diff --git a/ReviewSystem/ReviewSystem/CameraViewAlign.cpp b/ReviewSystem/ReviewSystem/CameraViewAlign.cpp
index 5573053..2e8d575 100644
--- a/ReviewSystem/ReviewSystem/CameraViewAlign.cpp
+++ b/ReviewSystem/ReviewSystem/CameraViewAlign.cpp
@@ -11,6 +11,7 @@
 IMPLEMENT_DYNAMIC(CCameraViewAlign, CCameraImageView)
 
 CCameraViewAlign::CCameraViewAlign(CWnd *pParentWnd) : CCameraImageView(pParentWnd)
+
 {
 	m_bDrawROIRect = TRUE;
 
@@ -171,6 +172,28 @@
 {
 	CCHBufferDC *pDC = new CCHBufferDC(this); // device context for painting
 
+	// LYW 20200810 �닔�젙
+	if (d_FindScore != 0)
+	{
+		if (d_FindScore > d_MatchingRate)
+		{
+			pDC->SetTextColor(RGB(0, 255, 0));
+		}
+
+		else if (d_FindScore < d_MatchingRate)
+		{
+			pDC->SetTextColor(RGB(255, 0, 0));
+		}
+		else
+		{
+			pDC->SetTextColor(RGB(255, 255, 255));
+		}
+	}
+	else
+	{
+		pDC->SetTextColor(RGB(255, 255, 255));
+	}
+
 	UpdateImageView(pDC);
 
 	if (m_bDrawROIRect) DrawROIRect(pDC);
diff --git a/ReviewSystem/ReviewSystem/DisplayMessage.cpp b/ReviewSystem/ReviewSystem/DisplayMessage.cpp
index ccacf49..f8e08c6 100644
--- a/ReviewSystem/ReviewSystem/DisplayMessage.cpp
+++ b/ReviewSystem/ReviewSystem/DisplayMessage.cpp
@@ -33,7 +33,9 @@
 void CDisplayMessage::SetPath(const CString& strPath)
 {
 	m_strLogPath = strPath;
-
+	CString m_GlobalLogPath;
+	m_strLogFile.Format(_T("D:\\DIT_LogData\\%04d%02d%02d"), m_strLogPath, m_TimeLogFile.GetYear(), m_TimeLogFile.GetMonth(), m_TimeLogFile.GetDay());
+	CreateDirectory(m_strLogFile, NULL);
 	CreateDirectory(m_strLogPath, NULL);
 
 	MakeLogFile();
@@ -42,6 +44,10 @@
 BOOL CDisplayMessage::MakeLogFile()
 {
 	// Log 泥섎━
+	CString m_GlobalLogPath;
+	m_strLogFile.Format(_T("D:\\DIT_LogData\\%04d%02d%02d"), m_TimeLogFile.GetYear(), m_TimeLogFile.GetMonth(), m_TimeLogFile.GetDay());
+	CreateDirectory(m_strLogFile, NULL);
+
 	if (m_strLogPath.IsEmpty())
 		return FALSE;
 
diff --git a/ReviewSystem/ReviewSystem/DlgAlignCamera.cpp b/ReviewSystem/ReviewSystem/DlgAlignCamera.cpp
index e659eee..ee55f10 100644
--- a/ReviewSystem/ReviewSystem/DlgAlignCamera.cpp
+++ b/ReviewSystem/ReviewSystem/DlgAlignCamera.cpp
@@ -34,6 +34,8 @@
 	}
 	m_vecCameraImageView.clear();
 	int nSize = (int)m_vecCameraImageView.size();
+	d_MatchingRate = 0.;
+	m_bAlignResultUpdate = FALSE;
 
 	m_pDAC2P = NULL;
 }
@@ -557,6 +559,7 @@
 		strValue = _T("Find Fail");
 		m_ctrlAlignResult.SetGradientColor(RGB(255,0,0));
 		SetImageMode(View_Camera);
+		m_bAlignResultUpdate = TRUE;
 		break;
 
 	case -1:
@@ -575,6 +578,7 @@
 		strValue = _T("Success");
 		m_ctrlAlignResult.SetGradientColor(RGB(0,255,0));
 		SetImageMode(View_Camera);
+		m_bAlignResultUpdate = TRUE;
 		break;
 
 	case 2:
@@ -608,6 +612,7 @@
 			m_AlignResult.Reset();
 			m_sPreAlignResult.Reset();
 			m_sPostAlignResult.Reset();
+			d_MatchingRate = pGlassResult->m_AlignRecipe.dMatchingRate;
 
 			CCoordCalibrator* pCal = m_pDAC2P->DAC2P_GetCoordCalibrator();
 			if (pCal)
@@ -783,12 +788,15 @@
 	if (nIDEvent==1000)
 	{
 		KillTimer(nIDEvent);
+		int TempScore0;
+		int TempScore1;
 
 		int nViewIndex = 2;
 		for (VectorCameraImageViewIt it=m_vecCameraImageView.begin(); it!=m_vecCameraImageView.end(); it++)
 		{
-			if (m_SharedImageData.GetUpdated(nViewIndex))
+			if (m_SharedImageData.GetUpdated(nViewIndex) || m_bAlignResultUpdate == TRUE)
 			{
+				if (m_bAlignResultUpdate == TRUE) m_bAlignResultUpdate = FALSE;
 				if (m_SharedImageData.LockImageData(nViewIndex))
 				{
 					const SSharedImageInfo* pImageInfo = m_SharedImageData.GetImageInfo(nViewIndex);
@@ -802,13 +810,66 @@
 							(*it)->SetRulerGab(pImageInfo->dRulerGab);		// um
 							(*it)->SetResolution(pImageInfo->dResolution);	// um
 							
-							switch(pImageInfo->nCameraIndex)
+							switch (pImageInfo->nCameraIndex)
 							{
 							case 0:
-								(*it)->SetViewName(_T("1st"));
+								(*it)->d_FindScore = m_AlignResult.dFindScore[0];
+								(*it)->d_MatchingRate = d_MatchingRate;
+								TempScore0 = m_AlignResult.dFindScore[0] * 100;
+								if ((*it)->d_FindScore != 0)
+								{
+									if ((*it)->d_FindScore > (*it)->d_MatchingRate)
+									{
+										CString TempStr;
+										TempStr.Format(_T("1st OK %d%%"), TempScore0);
+										(*it)->SetViewName(TempStr);
+									}
+
+									else if ((*it)->d_FindScore < (*it)->d_MatchingRate)
+									{
+										CString TempStr;
+										TempStr.Format(_T("1st NG %d%%"), TempScore0);
+										(*it)->SetViewName(TempStr);
+									}
+
+									else
+									{
+										(*it)->SetViewName(_T("1st"));
+									}
+								}
+								else
+								{
+									(*it)->SetViewName(_T("1st"));
+								}
 								break;
 							case 1:
-								(*it)->SetViewName(_T("2nd"));
+								(*it)->d_FindScore = m_AlignResult.dFindScore[1];
+								(*it)->d_MatchingRate = d_MatchingRate;
+								TempScore1 = m_AlignResult.dFindScore[1] * 100;
+								if ((*it)->d_FindScore != 0)
+								{
+									if ((*it)->d_FindScore > (*it)->d_MatchingRate)
+									{
+										CString TempStr;
+										TempStr.Format(_T("2nd OK %d%%"), TempScore1);
+										(*it)->SetViewName(TempStr);
+									}
+
+									else if ((*it)->d_FindScore < (*it)->d_MatchingRate)
+									{
+										CString TempStr;
+										TempStr.Format(_T("2nd NG %d%%"), TempScore1);
+										(*it)->SetViewName(TempStr);
+									}
+									else
+									{
+										(*it)->SetViewName(_T("2nd"));
+									}
+								}
+								else
+								{
+									(*it)->SetViewName(_T("2nd"));
+								}
 								break;
 							}
 
diff --git a/ReviewSystem/ReviewSystem/DlgAlignCamera.h b/ReviewSystem/ReviewSystem/DlgAlignCamera.h
index bbb525c..49e2718 100644
--- a/ReviewSystem/ReviewSystem/DlgAlignCamera.h
+++ b/ReviewSystem/ReviewSystem/DlgAlignCamera.h
@@ -39,6 +39,7 @@
 	void Reset();
 	void SetDAC2P(IDialogAlignCamera2Parent* pDAC2P)			{ m_pDAC2P = pDAC2P; }
 	void SetAlignResult(int nResultCode, double dDX, double dDy, double dTheta);
+	double d_MatchingRate;
 
 	virtual void UpdateProcessStatus(int nLineType, int nMachineType, int nProcessStatus, const CGlassResult* pGlassResult);
 
@@ -60,6 +61,7 @@
 	CakGroupCtrl m_ctrlGroupCtrlAlign;
 	CakButtonColorCtrl m_ctrlGetTempleteImage;
 	CakButtonColorCtrl m_ctrlButtonColorCtrl;
+	BOOL m_bAlignResultUpdate;
 
 
 	IDialogAlignCamera2Parent*	m_pDAC2P;
diff --git a/ReviewSystem/ReviewSystem/MainFrm.cpp b/ReviewSystem/ReviewSystem/MainFrm.cpp
index 6a51bdc..ef54a5d 100644
--- a/ReviewSystem/ReviewSystem/MainFrm.cpp
+++ b/ReviewSystem/ReviewSystem/MainFrm.cpp
@@ -626,8 +626,6 @@
 		return;
 	}
 
-	g_pLog->DisplayMessage(_T("Program exit by User!"));
-
 	DeinitReviewInterface();
 
 	__super::OnClose();
diff --git a/ReviewSystem/ReviewSystem/ReviewInterface.cpp b/ReviewSystem/ReviewSystem/ReviewInterface.cpp
index 9d3b085..54bac9e 100644
--- a/ReviewSystem/ReviewSystem/ReviewInterface.cpp
+++ b/ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -375,6 +375,8 @@
 		m_pView->DeleteDialogs();
 	}
 
+	g_pLog->DisplayMessage(_T("Program exit by User!"));
+
 	ClearAllObserverVector();
 	g_pLog->DisplayMessage(_T("Clear all Observer Vectors"));
 	::Sleep(400);
diff --git a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
index 4b3b22e..de293e5 100644
--- a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
+++ b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -3649,6 +3649,10 @@
 	{
 		strPath.Format(_T("%s\\%s"), pNetworkInfo->m_strAlignImagePath, strGlassID);
 		pAlignCameraControl->SetSaveImageBasePath(strPath);
+		strPath.Format(_T("D:\\ResultData\\AlignOK\\%s"), strGlassID);
+		pAlignCameraControl->SetSaveImageOKPath(strPath);
+		strPath.Format(_T("D:\\ResultData\\AlignNG\\%s"), strGlassID);
+		pAlignCameraControl->SetSaveImageNGPath(strPath);
 	}
 	m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Make Align image path End "));
 }

--
Gitblit v1.9.3