From 2bd50ead7f0b92fb9ed5b477b63dea8fbcf8217e Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 월, 19 7월 2021 10:40:50 +0900
Subject: [PATCH] Ongoing60 #3517 CF AOI Review 자가진단 기능 개선

---
 ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.h               |    5 
 ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp                 |  116 ++++++
 ReviewSystem/ReviewSystem/ReviewSystem.rc                          |  256 ++++++++++----
 ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Flatness.cpp            |   27 +
 ReviewSystem/ReviewSystem/ReviewInterface.cpp                      |   28 +
 ReviewSystem/M_AutoDiagnosisManager/DiagnosisInfo.cpp              |    6 
 ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp         |  207 ++++++++---
 ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisManager.h     |    2 
 ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp               |   12 
 ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisProcessor.h   |    1 
 Internal_Library/CHWsiControls/WsiControl_Dit.cpp                  |    4 
 Internal_Library/Include/CHWsiControls/WsiControlInfo.h            |    1 
 ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.cpp          |  207 +++++++++-
 ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.h            |   17 
 ReviewSystem/ReviewSystem/ReviewInterface.h                        |    1 
 ReviewSystem/M_AutoDiagnosisManager/DiagnosisManager.cpp           |    9 
 ReviewSystem/ReviewSystem/resource.h                               |   42 ++
 ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.cpp             |   53 ++
 ReviewSystem/M_AutoDiagnosisManager/M_AutoDiagnosisManager.vcxproj |    1 
 ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.h                   |   21 +
 ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisInfo.h        |   44 ++
 21 files changed, 883 insertions(+), 177 deletions(-)

diff --git a/Internal_Library/CHWsiControls/WsiControl_Dit.cpp b/Internal_Library/CHWsiControls/WsiControl_Dit.cpp
index 0fff162..0d17f11 100644
--- a/Internal_Library/CHWsiControls/WsiControl_Dit.cpp
+++ b/Internal_Library/CHWsiControls/WsiControl_Dit.cpp
@@ -455,6 +455,10 @@
 			measureResult.nWsiState	= pPacket->GetInt(3);
 			measureResult.dAccuracy = pPacket->GetDouble(0);
 			measureResult.dRepeatability = pPacket->GetDouble(1);
+			for (int i = 0; i < 10; i++)
+			{
+				measureResult.dDiagnosisHeight[i] = pPacket->GetDouble(i + 2);
+			}
 			m_pWC2P->IWC2P_DisplayMessage(m_nIndex,_T("VLSI state %d ACC %f RTB %f"),measureResult.nWsiState,measureResult.dAccuracy ,measureResult.dRepeatability);
 		}
 		break;
diff --git a/Internal_Library/Include/CHWsiControls/WsiControlInfo.h b/Internal_Library/Include/CHWsiControls/WsiControlInfo.h
index bab4f4d..4fc2f7d 100644
--- a/Internal_Library/Include/CHWsiControls/WsiControlInfo.h
+++ b/Internal_Library/Include/CHWsiControls/WsiControlInfo.h
@@ -75,6 +75,7 @@
 	int			nWsiState;
 	double		dAccuracy;
 	double      dRepeatability;
+	double		dDiagnosisHeight[10];
 
 	bool		bBigSizeDefect;
 	
diff --git a/ReviewSystem/M_AutoDiagnosisManager/DiagnosisInfo.cpp b/ReviewSystem/M_AutoDiagnosisManager/DiagnosisInfo.cpp
index 33e491d..3f0ef85 100644
--- a/ReviewSystem/M_AutoDiagnosisManager/DiagnosisInfo.cpp
+++ b/ReviewSystem/M_AutoDiagnosisManager/DiagnosisInfo.cpp
@@ -19,6 +19,12 @@
 	file.GetItem(_T("FLATNESS_JUDGE_DATA_Z_RANGE"), m_dJudgeData_ZRange, 0);
 	file.GetItem(_T("FLATNESS_GLASS_X"), m_nGlassSizeX, 0);
 	file.GetItem(_T("FLATNESS_GLASS_Y"), m_nGlassSizeY, 0);
+	//#3514_LYW_CF AOI Review 자가진단 기능 개선_START
+	file.GetItem(_T("FLATNESS_SKIPMODE"), m_nFlatnessSkipMode, 0);
+	file.GetItem(_T("SQUARENESS_STANDARD"), m_dSquarenessStandard, 0);
+	file.GetItem(_T("SQUARENESS_STANDARD2"), m_dSquarenessStandard2, 0);
+	file.GetItem(_T("WSI_STANDARD"), m_dWSIStandard, 0);
+	//#3514_LYW_CF AOI Review 자가진단 기능 개선_END
 	file.GetItem(_T("FLATNESS_MODE"), m_nFlatnessMode, 0);
 	file.GetItem(_T("FLATNESS_RANGECOUNT"), m_nRangeCount_Flatness, 0);
 	file.GetItem(_T("WSI_PANEL_COUNT"), m_nPanelCount_Wsi, 0);
diff --git a/ReviewSystem/M_AutoDiagnosisManager/DiagnosisManager.cpp b/ReviewSystem/M_AutoDiagnosisManager/DiagnosisManager.cpp
index 9ceb51d..5290a55 100644
--- a/ReviewSystem/M_AutoDiagnosisManager/DiagnosisManager.cpp
+++ b/ReviewSystem/M_AutoDiagnosisManager/DiagnosisManager.cpp
@@ -1013,6 +1013,15 @@
 	return CreateDirectory(strTemp, NULL);
 }
 
+BOOL CDiagnosisManager::CheckManualMode()
+{
+	if (m_pDP2P->IDP2P_CheckManualMode() == TRUE)
+	{
+		return TRUE;
+	}
+	return FALSE;
+}
+
 int CDiagnosisManager::SetDiagnosisResultCount_Squareness(int nCount)
 {
 	if (nCount == int(m_vecDiagnosisResult_Squareness.size())) return int(m_vecDiagnosisResult_Squareness.size());
diff --git a/ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp b/ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp
index ad4b0c8..e518d50 100644
--- a/ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp
+++ b/ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp
@@ -50,6 +50,8 @@
 {
 	if (pParameter == NULL) return;
 
+	CString strMessage = "";
+
 	CDiagnosisProcessData* pProcessData = static_cast<CDiagnosisProcessData*>(pParameter);
 	int nProcessMode = pProcessData->nProcessMode;
 
@@ -60,20 +62,69 @@
 		m_pManager->m_bProcessAll = true;
 		ProcessAll();
 		break;
+		//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+	case DiagnosisMode_Review :
+		strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisMode_Review START"));
+		m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
+
+		m_pManager->m_bProcessAll = false;
+		if (IsCommandStop()) return;
+		m_pDP2P->IDP2P_SetDialogTap(0);
+		ProcessSquareness();
+		Sleep(1000);
+		if (IsCommandStop()) return;
+		m_pDP2P->IDP2P_SetDialogTap(1);
+		ProcessFlatness();
+		Sleep(1000);
+
+		if (ProcessDiagnosisJudge() == FALSE) {
+			strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
+			m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
+		}
+
+		strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisMode_Review END"));
+		m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
+
+		break;
+
+	case DiagnosisMode_Wsi:
+		strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisMode_WSI START"));
+		m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
+
+		m_pManager->m_bProcessAll = false;
+		if (IsCommandStop()) return;
+		m_pDP2P->IDP2P_UpdateDialog(7);
+		ProcessWsi();
+		Sleep(1000);
+
+		if (ProcessDiagnosisJudge() == FALSE) {
+			strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
+			m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
+		}
+
+		strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisMode_WSI END"));
+		m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
+
+		break;
 
 	case DiagnosisMode_Squareness:
 		m_pManager->m_bProcessAll = false;
 		ProcessSquareness();
+		Sleep(1000);
+		if (ProcessDiagnosisJudge() == FALSE) {
+			strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
+			m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
+		}
 		break;
-
-	case DiagnosisMode_Wsi:
-		m_pManager->m_bProcessAll = false;
-		ProcessWsi();
-		break;
-
+		//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
 	case DiagnosisMode_Flatness:
 		m_pManager->m_bProcessAll = false;
 		ProcessFlatness();
+		Sleep(1000);
+		if (ProcessDiagnosisJudge() == FALSE) {
+			strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
+			m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
+		}
 		break;
 
 	case DiagnosisMode_Flatness_Manual:
@@ -94,6 +145,8 @@
 int CDiagnosisProcessor::ProcessAll()
 {
 	if (IsCommandStop()) return 1;
+
+	CString strMessage = "";
 	
 	m_pDP2P->IDP2P_UpdateDialog(7);//WSI Result 移� 珥덇린�솕 
 	//if (m_pDP2P == NULL) return 0;
@@ -114,53 +167,16 @@
 	m_pDP2P->IDP2P_SetDialogTap(1);
     ProcessFlatness();
 
-	Sleep(2000);
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+	//Sleep(2000);
+	Sleep(1000);
 
-	//#3407 KYH �옄媛�吏꾨떒 Judge �뙋�젙 諛� �븣�엺 諛쒖깮 湲곕뒫 ADD START
-	for (int i = 0; i < 2; i++)
-	{
-		int nSelModuleIndex = i;
-
-		CDiagnosisInfo* pSettingInfo = m_pManager->GetDiagnosisInfo();
-		if (pSettingInfo == NULL) {
-			m_pDP2P->IDP2P_UpdateDialog(4);
-			return 0;
-		}
-
-		CDiagnosisResult* pProcessResult = m_pManager->GetDiagnosisResult_Squareness(nSelModuleIndex); // 0412 kyh 吏곴컖�룄 痢≪젙 紐⑤뱢�뿉 ���븳 寃곌낵�젙蹂�
-		if (pProcessResult == NULL) {
-			m_pDP2P->IDP2P_UpdateDialog(4);
-			return 0;
-		}
-
-		CDiagnosisResult* pProcessWSIResult = m_pManager->GetDiagnosisResult_Wsi(nSelModuleIndex); // 0412 kyh WSI 痢≪젙 紐⑤뱢�뿉 ���븳 寃곌낵 �젙蹂�
-		if (pProcessWSIResult == NULL) {
-			m_pDP2P->IDP2P_UpdateDialog(6);
-			return 0;
-		}
-
-		CString strMessage = _T("");
-
-		double dDate = (90 - pProcessResult->GetGantryDegree());
-		if (abs(dDate) >= abs(pSettingInfo->GetJudgeData_Degree())) // 0412 kyh 吏곴컖�룄�뿉�꽌 �굹�삩 Dgree 媛믪씠 �꽕�젙�븳 Judge 媛믩낫�떎 �겕嫄곕굹 媛숈쓣寃쎌슦
-		{
-			
-			m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // �븣�엺 諛쒖깮
-			strMessage.Format(_T("[Judge Data] [Gantry %d]Diagnosis Error ! GantryDegree[%lf] Judge[%lf]"), i, dDate, pSettingInfo->GetJudgeData_Degree());
-			m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
-		}
-
-		if (pProcessWSIResult->getWSI_RTB() >= pSettingInfo->GetJudgeData_3Sigma() || pProcessWSIResult->getWSI_RTB() <= 0) // 0412 kyh WSI �몴以��렪李� 鍮꾧탳
-		{
-			m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // �븣�엺 諛쒖깮
-			strMessage.Format(_T("[Judge Data] [WSI %d]Diagnosis Error ! WSI RTB[%lf] Judge[%lf]"), i, pProcessWSIResult->getWSI_RTB(), pSettingInfo->GetJudgeData_3Sigma());
-			m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
-		}
+	if (ProcessDiagnosisJudge() == FALSE) {
+		strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
+		m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
 	}
-	//#3407 KYH �옄媛�吏꾨떒 Judge �뙋�젙 諛� �븣�엺 諛쒖깮 湲곕뒫 ADD END
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
 
-	//而댄뵆由욱듃 �떊�샇 蹂대궡湲�
-	m_pDP2P->IDP2P_DiagnosisSendCompleteSig();
 	m_pManager->m_bProcessAll = false;
 
 	return 1;
@@ -284,7 +300,10 @@
 		int stTime = GetTickCount();
 		while (1)
 		{
-			if (11000 <= GetTickCount() - stTime)
+			//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+			//if (11000 <= GetTickCount() - stTime)
+			//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
+			if (1000 <= GetTickCount() - stTime)
 			{
 				break;
 			}
@@ -292,14 +311,22 @@
 
 		}
 		m_pDP2P->IDP2P_SetAFMTracking(nSelModuleIndex, TRUE);
-		Sleep(1000);
+		//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+		//Sleep(1000);
+		Sleep(500);
+		//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
 
 		CString strimagename;
 		strimagename.Format(_T("%s_Module[%d]Index[%d].bmp"), m_pManager->m_strResultImageFileName, nSelModuleIndex, nIdx);
 
+
 		// find mark at panel
 		double dFindPixX = 0., dFindPixY = 0.;
-		if (m_pDP2P->IDP2P_FindPanelCenter(nSelModuleIndex, dFindPixX, dFindPixY, strimagename) == FALSE) continue;
+		if (m_pDP2P->IDP2P_FindPanelCenter(nSelModuleIndex, dFindPixX, dFindPixY, strimagename) == FALSE) {
+			strMessage.Format(_T("[CDiagnosisProcessor] find mark at panel FAIL"));
+			m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
+			continue;
+		}
 
 		m_pDP2P->IDP2P_SetAFMTracking(nSelModuleIndex, FALSE);
 
@@ -435,7 +462,10 @@
 		}
 		m_pDP2P->IDP2P_SetWsiManualMeasure(nSelModuleIndex, dXpos, dYpos);
 		// move panel
-		Sleep(2000);
+		//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+		//Sleep(2000);
+		Sleep(1000);
+		//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
 		m_pDP2P->IDP2P_MotorGo(nSelModuleIndex, dXpos, dYpos);
 
 		if (m_pDP2P->IDP2P_IsGantryMotionEnd(nSelModuleIndex) == FALSE)
@@ -447,7 +477,10 @@
 		int stTime = GetTickCount();
 		while (1)
 		{
-			if (10000 <= GetTickCount() - stTime)
+			//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+			//if (10000 <= GetTickCount() - stTime)
+			if (1000 <= GetTickCount() - stTime)
+			//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
 			{
 				break;
 			}
@@ -508,8 +541,18 @@
 {
 	if (m_pDP2P == NULL || m_pManager == NULL) return 0;
 
+	CString strMessage = "";
+
 	CDiagnosisInfo * pSettingInfo = m_pManager->GetDiagnosisInfo();
 	if (pSettingInfo == NULL) return 0;
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+	if (pSettingInfo->GetFlastnessSkipMode() == TRUE) {
+		strMessage.Format(_T("[CDiagnosisProcessor] FlastnessSkipMode!"));
+		m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
+		return 0;
+	}
+
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
 
 	int nSelModuleIndex = m_pDP2P->IDP2P_GetSelectedModuleIndex();
 	int nFlatnessMode = pSettingInfo->GetFlatnessMode();
@@ -550,7 +593,10 @@
 		{
 			// AF Home
 			m_pDP2P->IDP2P_AFMHomePosition(0);
-			Sleep(5000);
+			//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+			//Sleep(5000);
+			Sleep(1000);
+			//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
 			m_pDP2P->IDP2P_SetAFMTracking(0, TRUE);
 			Sleep(500);
 		}
@@ -689,6 +735,55 @@
 	return TRUE;
 }
 
+int CDiagnosisProcessor::ProcessDiagnosisJudge()
+{
+	for (int i = 0; i < 2; i++)
+	{
+		int nSelModuleIndex = i;
+
+		CDiagnosisInfo* pSettingInfo = m_pManager->GetDiagnosisInfo();
+		if (pSettingInfo == NULL) {
+			m_pDP2P->IDP2P_UpdateDialog(4);
+			return 0;
+		}
+
+		CDiagnosisResult* pProcessResult = m_pManager->GetDiagnosisResult_Squareness(nSelModuleIndex); // 0412 kyh 吏곴컖�룄 痢≪젙 紐⑤뱢�뿉 ���븳 寃곌낵�젙蹂�
+		if (pProcessResult == NULL) {
+			m_pDP2P->IDP2P_UpdateDialog(4);
+			return 0;
+		}
+
+		CDiagnosisResult* pProcessWSIResult = m_pManager->GetDiagnosisResult_Wsi(nSelModuleIndex); // 0412 kyh WSI 痢≪젙 紐⑤뱢�뿉 ���븳 寃곌낵 �젙蹂�
+		if (pProcessWSIResult == NULL) {
+			m_pDP2P->IDP2P_UpdateDialog(6);
+			return 0;
+		}
+
+		CString strMessage = _T("");
+
+		double dDate = (90 - pProcessResult->GetGantryDegree());
+		if (abs(dDate) >= abs(pSettingInfo->GetJudgeData_Degree())) // 0412 kyh 吏곴컖�룄�뿉�꽌 �굹�삩 Dgree 媛믪씠 �꽕�젙�븳 Judge 媛믩낫�떎 �겕嫄곕굹 媛숈쓣寃쎌슦
+		{
+
+			m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // �븣�엺 諛쒖깮
+			strMessage.Format(_T("[Judge Data] [Gantry %d]Diagnosis Error ! GantryDegree[%lf] Judge[%lf]"), i, dDate, pSettingInfo->GetJudgeData_Degree());
+			m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
+		}
+
+		if (pProcessWSIResult->getWSI_RTB() >= pSettingInfo->GetJudgeData_3Sigma() || pProcessWSIResult->getWSI_RTB() <= 0) // 0412 kyh WSI �몴以��렪李� 鍮꾧탳
+		{
+			m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // �븣�엺 諛쒖깮
+			strMessage.Format(_T("[Judge Data] [WSI %d]Diagnosis Error ! WSI RTB[%lf] Judge[%lf]"), i, pProcessWSIResult->getWSI_RTB(), pSettingInfo->GetJudgeData_3Sigma());
+			m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
+		}
+	}
+	//#3407 KYH �옄媛�吏꾨떒 Judge �뙋�젙 諛� �븣�엺 諛쒖깮 湲곕뒫 ADD END
+
+	//而댄뵆由욱듃 �떊�샇 蹂대궡湲�
+	m_pDP2P->IDP2P_DiagnosisSendCompleteSig();
+	return 1;
+}
+
 BOOL CDiagnosisProcessor::CalculateSquareness(int nIndex)
 {
 	if (m_pDP2P == NULL || m_pManager == NULL) return 0;
diff --git a/ReviewSystem/M_AutoDiagnosisManager/M_AutoDiagnosisManager.vcxproj b/ReviewSystem/M_AutoDiagnosisManager/M_AutoDiagnosisManager.vcxproj
index 4a9c256..b64e0de 100644
--- a/ReviewSystem/M_AutoDiagnosisManager/M_AutoDiagnosisManager.vcxproj
+++ b/ReviewSystem/M_AutoDiagnosisManager/M_AutoDiagnosisManager.vcxproj
@@ -190,6 +190,7 @@
       </ModuleDefinitionFile>
       <AdditionalLibraryDirectories>../lib;../../Internal_Library/lib;</AdditionalLibraryDirectories>
       <AdditionalDependencies>CHThreadPools_x64_vc15.lib</AdditionalDependencies>
+      <ImportLibrary>$(SolutionDir)\lib\$(TargetName).lib</ImportLibrary>
     </Link>
     <Midl>
       <MkTypLibCompatible>false</MkTypLibCompatible>
diff --git a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Flatness.cpp b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Flatness.cpp
index c2563fb..d978c31 100644
--- a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Flatness.cpp
+++ b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Flatness.cpp
@@ -982,6 +982,20 @@
 void CDlgSelfDiagnosis_Flatness::OnBnClickedButtonSimulation()
 {
 	// TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎.
+
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+	if (m_pDiagnosisManager->CheckManualMode() == FALSE)
+	{
+		CString strMessage;
+		strMessage.Format(_T("Change Manual Mode!!"));
+		if (IDOK == AfxMessageBox(strMessage, MB_OK | MB_ICONERROR))
+		{
+			g_pLog->DisplayMessage(_T("Manual Diagnosis Fail! Not Manual Mode"));
+			return;
+		}
+	}
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
+
 	if (m_bState == FALSE)
 	{
 		m_bState = TRUE;
@@ -999,6 +1013,19 @@
 
 void CDlgSelfDiagnosis_Flatness::OnBnClickedButtonManual()
 {
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+	if (m_pDiagnosisManager->CheckManualMode() == FALSE)
+	{
+		CString strMessage;
+		strMessage.Format(_T("Change Manual Mode!!"));
+		if (IDOK == AfxMessageBox(strMessage, MB_OK | MB_ICONERROR))
+		{
+			g_pLog->DisplayMessage(_T("Manual Diagnosis Fail! Not Manual Mode"));
+			return;
+		}
+	}
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
+
 	m_pDiagnosisManager->ManualMeasure_Flatness();
 }
 
diff --git a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.cpp b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.cpp
index 8419810..df5dc06 100644
--- a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.cpp
+++ b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.cpp
@@ -56,6 +56,12 @@
 	DDX_Control(pDX, IDC_EDIT_WSI_PANEL_POS_Y, m_editPanelPosY);
 	DDX_Control(pDX, IDC_EDIT_WSI_PANEL_POS_X2, m_editPanelPosX2);
 	DDX_Control(pDX, IDC_EDIT_WSI_PANEL_POS_Y2, m_editPanelPosY2);
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+	DDX_Control(pDX, IDC_CHECK_SELF_DIAGNOSIS_FLATNESS_SKIP, m_CheckFlatnessSkip);
+	DDX_Control(pDX, IDC_EDIT_SQUARENESS_STANDARD, m_editSquarenessStandard);
+	DDX_Control(pDX, IDC_EDIT_SQUARENESS_STANDARD2, m_editSquarenessStandard2);
+	DDX_Control(pDX, IDC_EDIT_WSI_STANDARD, m_editWSIStandard);
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
 	DDX_Text(pDX, IDC_EDIT_REVIEW_PANEL_POS_X, m_dEditReviewPanelPosX);
 	DDX_Text(pDX, IDC_EDIT_REVIEW_PANEL_POS_Y, m_dEditReviewPanelPosY);
 	DDX_Text(pDX, IDC_EDIT_REVIEW_PANEL_POS_X2, m_dEditReviewPanelPosX2);
@@ -111,16 +117,19 @@
 
 BOOL CDlgSelfDiagnosis_Setting::ReadAutoDiagnosisConfigFile()
 {
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+	CString strConfigFilePath = _T("");
+	strConfigFilePath.Format(_T("%s\\%s"), REVIEW_AUTO_DIAGNOSIS_SETTING_FILE_PATH, REVIEW_AUTO_DIAGNOSIS_SETTING_FILE_NAME);
+	m_pDiagnosisManager->LoadSettingConfigFile(strConfigFilePath);
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
 
 	CDiagnosisInfo* pSettingInfo = m_pDiagnosisManager->GetDiagnosisInfo();
 	if (pSettingInfo == NULL)
 		return FALSE;
 
 	CString strTemp = _T("");
-	CString strFilePath = REVIEW_AUTO_DIAGNOSIS_SETTING_FILE_PATH;
-	CString strFileName = _T("AutoDiagnosisSetting.cfg");
 
-	m_editFilePath.SetWindowTextA(strFilePath +_T('\\') + strFileName);
+	m_editFilePath.SetWindowTextA(strConfigFilePath);
 
 	strTemp.Format("%d", pSettingInfo->GetModuleCount());
 	m_editModuleCount.SetWindowTextA(strTemp);
@@ -133,6 +142,14 @@
 
 	strTemp.Format("%f", pSettingInfo->GetJudgeData_Degree());
 	m_editJudgeData_Degree.SetWindowTextA(strTemp);
+
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+	strTemp.Format("%f", pSettingInfo->GetSquarenessStandard());
+	m_editSquarenessStandard.SetWindowTextA(strTemp);
+
+	strTemp.Format("%f", pSettingInfo->GetSquarenessStandard2());
+	m_editSquarenessStandard2.SetWindowTextA(strTemp);
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
 
 	strTemp.Format("%d", pSettingInfo->GetCameraFrameWidth());
 	m_editFrameWidth.SetWindowTextA(strTemp);
@@ -166,12 +183,20 @@
 	strTemp.Format("%d", pSettingInfo->GetGlassSizeY_Flatness());
 	m_editGlassSizeY.SetWindowTextA(strTemp);
 
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+	m_CheckFlatnessSkip.SetCheck(pSettingInfo->GetFlastnessSkipMode());
+    //#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
 
 	strTemp.Format("%d", pSettingInfo->GetPanelCount_Wsi());
 	m_editPanelCount_Wsi.SetWindowTextA(strTemp);
 
 	strTemp.Format("%f", pSettingInfo->GetJudgeData_3Sigma());
 	m_editJudgeData_3Sigma.SetWindowTextA(strTemp);
+
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+	strTemp.Format("%f", pSettingInfo->GetWSIStandard());
+	m_editWSIStandard.SetWindowTextA(strTemp);
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
 
 	strTemp.Format("%f", pSettingInfo->GetPanelPosX_Wsi());
 	m_editPanelPosX.SetWindowTextA(strTemp);
@@ -278,6 +303,28 @@
 	nTemp = atoi(strTemp);
 	macroFile.SetItem(strItem, nTemp);
 
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+	strItem.Format(_T("FLATNESS_SKIPMODE"));
+	nTemp = m_CheckFlatnessSkip.GetCheck();
+	macroFile.SetItem(strItem, nTemp);
+
+	strItem.Format(_T("SQUARENESS_STANDARD"));
+	m_editSquarenessStandard.GetWindowTextA(strTemp);
+	dTemp = atof(strTemp);
+	macroFile.SetItem(strItem, dTemp);
+
+	strItem.Format(_T("SQUARENESS_STANDARD2"));
+	m_editSquarenessStandard2.GetWindowTextA(strTemp);
+	dTemp = atof(strTemp);
+	macroFile.SetItem(strItem, dTemp);
+
+	strItem.Format(_T("WSI_STANDARD"));
+	m_editWSIStandard.GetWindowTextA(strTemp);
+	dTemp = atof(strTemp);
+	macroFile.SetItem(strItem, dTemp);
+
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
+
 	strItem.Format(_T("WSI_PANEL_COUNT"));
 	m_editPanelCount_Wsi.GetWindowTextA(strTemp);
 	nTemp = atoi(strTemp);
diff --git a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.h b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.h
index 83262bd..24c259c 100644
--- a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.h
+++ b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.h
@@ -63,4 +63,9 @@
 	double m_dEditReviewPanelPosY5;
 	double m_dEditReviewPanelPosX6;
 	double m_dEditReviewPanelPosY6;
+public:
+	CButton m_CheckFlatnessSkip;
+	CEdit m_editSquarenessStandard;
+	CEdit m_editSquarenessStandard2;
+	CEdit m_editWSIStandard;
 };
diff --git a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.cpp b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.cpp
index 58093dc..977e28c 100644
--- a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.cpp
+++ b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.cpp
@@ -15,7 +15,7 @@
 CDlgSelfDiagnosis_Squareness::CDlgSelfDiagnosis_Squareness(CDiagnosisManager* pDiagnosisManager, CWnd* pParent /*=nullptr*/)
 	: CDialogEx(IDD_DLG_SELF_DIAGNOSIS_SQUARENESS, pParent)
 	, m_nSelModuleIndex(0)
-	, m_dEditTheta(0)
+	, m_dEditLeftTheta(0)
 	, m_dEditMotorX_1(0)
 	, m_dEditMotorY_1(0)
 	, m_dEditPixelX_1(0)
@@ -28,6 +28,21 @@
 	, m_dEditMotorY_3(0)
 	, m_dEditPixelX_3(0)
 	, m_dEditPixelY_3(0)
+	, m_dEditRightTheta(0)
+	, m_dEditMotorX_4(0)
+	, m_dEditMotorY_4(0)
+	, m_dEditPixelX_4(0)
+	, m_dEditPixelY_4(0)
+	, m_dEditMotorX_5(0)
+	, m_dEditMotorY_5(0)
+	, m_dEditPixelX_5(0)
+	, m_dEditPixelY_5(0)
+	, m_dEditMotorX_6(0)
+	, m_dEditMotorY_6(0)
+	, m_dEditPixelX_6(0)
+	, m_dEditPixelY_6(0)
+	, m_editFirstSettingStandard(0)
+	, m_editFirstSettingStandard2(0)
 {
 	m_pDiagnosisManager = pDiagnosisManager;
 }
@@ -41,7 +56,7 @@
 	CDialogEx::DoDataExchange(pDX);
 	DDX_Control(pDX, IDC_GRID_GANTRY_DATA_HISTORY, m_ctrlGridGantryDataHistory);
 	DDX_Control(pDX, IDC_LIST, m_ctrlListFileHistory);
-	DDX_Text(pDX, IDC_EDIT_GANTRY_THETA, m_dEditTheta);
+	DDX_Text(pDX, IDC_EDIT_GANTRY_THETA, m_dEditLeftTheta);
 	DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_X, m_dEditMotorX_1);
 	DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y, m_dEditMotorY_1);
 	DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X, m_dEditPixelX_1);
@@ -55,6 +70,22 @@
 	DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y3, m_dEditMotorY_3);
 	DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X3, m_dEditPixelX_3);
 	DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_Y3, m_dEditPixelY_3);
+
+	DDX_Text(pDX, IDC_EDIT_GANTRY_THETA2, m_dEditRightTheta);
+	DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_X4, m_dEditMotorX_4);
+	DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y4, m_dEditMotorY_4);
+	DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X4, m_dEditPixelX_4);
+	DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_Y4, m_dEditPixelY_4);
+	DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_X5, m_dEditMotorX_5);
+	DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y5, m_dEditMotorY_5);
+	DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X5, m_dEditPixelX_5);
+	DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_Y5, m_dEditPixelY_5);
+	DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_X6, m_dEditMotorX_6);
+	DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y6, m_dEditMotorY_6);
+	DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X6, m_dEditPixelX_6);
+	DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_Y6, m_dEditPixelY_6);
+	DDX_Text(pDX, IDC_EDIT_SQUARENESS_FIRSTSETTING, m_editFirstSettingStandard);
+	DDX_Text(pDX, IDC_EDIT_SQUARENESS_FIRSTSETTING2, m_editFirstSettingStandard2);
 	//DDX_Control(pDX, IDC_BUTTON_SIMULATION, m_BtSumulation);
 	//DDX_Control(pDX, IDC_BUTTON_SIMULATION, m_BtSumulation);
 	DDX_Control(pDX, IDC_BUTTON_SIMULATION2, m_BtSumulation);
@@ -157,88 +188,135 @@
 		const CDiagnosisInfo* pSettingInfo = m_pDiagnosisManager->GetDiagnosisInfo();
 		if (pSettingInfo == NULL) return;
 
-		const CDiagnosisResult* pStandardResult = pSettingInfo->GetSettingResult_Squareness(m_nSelModuleIndex);
-		if (pStandardResult == NULL) return;
+		m_editFirstSettingStandard = pSettingInfo->GetSquarenessStandard();
+		m_editFirstSettingStandard2 = pSettingInfo->GetSquarenessStandard2();
 
 		if (bLoadResult) // update load file data
 		{
-			const CDiagnosisResult* pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(m_nSelModuleIndex);
+			const CDiagnosisResult* pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(0);
 			if (pResult == NULL) return;
 
 			// result : theta, pixel position
-			m_dEditTheta = pResult->GetGantryDegree();
+			m_dEditLeftTheta = pResult->GetGantryDegree();
 			for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
 			{
 				const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx);
 				if (pPosData == NULL) continue;
 
-				if (pPosData->nIndex == PanelPosition_Base)
+				if (pPosData->nPosMode == PanelPosition_Base)
 				{
 					m_dEditPixelX_1 = pPosData->dPixelX;
 					m_dEditPixelY_1 = pPosData->dPixelY;
 				}
-				else if (pPosData->nIndex == PanelPosition_Sub)
+				else if (pPosData->nPosMode == PanelPosition_Sub)
 				{
 					m_dEditPixelX_2 = pPosData->dPixelX;
 					m_dEditPixelY_2 = pPosData->dPixelY;
 				}
-				else if (pPosData->nIndex == PanelPosition_Addition)
+				else if (pPosData->nPosMode == PanelPosition_Addition)
 				{
 					m_dEditPixelX_3 = pPosData->dPixelX;
 					m_dEditPixelY_3 = pPosData->dPixelY;
 				}
 			}
+
+			pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(1);
+			if (pResult == NULL) return;
+
+			// result : theta, pixel position
+			m_dEditRightTheta = pResult->GetGantryDegree();
+			for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
+			{
+				const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx+3);
+				if (pPosData == NULL) continue;
+
+				if (pPosData->nPosMode == PanelPosition_Base)
+				{
+					m_dEditPixelX_4 = pPosData->dPixelX;
+					m_dEditPixelY_4 = pPosData->dPixelY;
+				}
+				else if (pPosData->nPosMode == PanelPosition_Sub)
+				{
+					m_dEditPixelX_5 = pPosData->dPixelX;
+					m_dEditPixelY_5 = pPosData->dPixelY;
+				}
+				else if (pPosData->nPosMode == PanelPosition_Addition)
+				{
+					m_dEditPixelX_6 = pPosData->dPixelX;
+					m_dEditPixelY_6 = pPosData->dPixelY;
+				}
+			}
+
 		}
 		else if (bLoadResult == FALSE && m_pDiagnosisManager->ExistStandardData() == FALSE)// update setting data
 		{
-			const CDiagnosisResult* pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(m_nSelModuleIndex);
+			const CDiagnosisResult* pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(0);
 			if (pResult == NULL) return;
 
 			// result : theta, pixel position
-			m_dEditTheta = pResult->GetGantryDegree();
+			m_dEditLeftTheta = pResult->GetGantryDegree();
 
 			for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
 			{
 				const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx);
 				if (pPosData == NULL) continue;
 
-				if (pPosData->nIndex == PanelPosition_Base)
+				if (pPosData->nPosMode == PanelPosition_Base)
 				{
 					m_dEditPixelX_1 = pPosData->dPixelX;
 					m_dEditPixelY_1 = pPosData->dPixelY;
 				}
-				else if (pPosData->nIndex == PanelPosition_Sub)
+				else if (pPosData->nPosMode == PanelPosition_Sub)
 				{
 					m_dEditPixelX_2 = pPosData->dPixelX;
 					m_dEditPixelY_2 = pPosData->dPixelY;
 				}
-				else if (pPosData->nIndex == PanelPosition_Addition)
+				else if (pPosData->nPosMode == PanelPosition_Addition)
 				{
 					m_dEditPixelX_3 = pPosData->dPixelX;
 					m_dEditPixelY_3 = pPosData->dPixelY;
 				}
 			}
+
+			pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(1);
+			if (pResult == NULL) return;
+
+			// result : theta, pixel position
+			m_dEditLeftTheta = pResult->GetGantryDegree();
+
+			for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
+			{
+				const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx+3);
+				if (pPosData == NULL) continue;
+
+				if (pPosData->nPosMode == PanelPosition_Base)
+				{
+					m_dEditPixelX_4 = pPosData->dPixelX;
+					m_dEditPixelY_4 = pPosData->dPixelY;
+				}
+				else if (pPosData->nPosMode == PanelPosition_Sub)
+				{
+					m_dEditPixelX_5 = pPosData->dPixelX;
+					m_dEditPixelY_5 = pPosData->dPixelY;
+				}
+				else if (pPosData->nPosMode == PanelPosition_Addition)
+				{
+					m_dEditPixelX_6 = pPosData->dPixelX;
+					m_dEditPixelY_6 = pPosData->dPixelY;
+				}
+			}
+
 		}
 		else
 		{
-			int nPlanindex = 0;
-
 			// result : theta, pixel position
-			const CDiagnosisResult* pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(m_nSelModuleIndex);
+			const CDiagnosisResult* pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(0);
 			if (pResult == NULL) return;
 
 			BOOL bProcess = FALSE;
 			for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
 			{
-				if (m_nSelModuleIndex == 1)
-				{
-					nPlanindex = nPIdx + 3;
-				}
-				else
-				{
-					nPlanindex = nPIdx;
-				}
-				const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPlanindex);
+				const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx);
 				if (pPosData == NULL) continue;
 
 				if (pPosData->nPosMode == PanelPosition_Base)
@@ -247,13 +325,13 @@
 					m_dEditPixelY_1 = pPosData->dPixelY;
 					bProcess = pPosData->bProcsss;
 				}
-				else if (pPosData->nIndex == PanelPosition_Sub)
+				else if (pPosData->nPosMode == PanelPosition_Sub)
 				{
 					m_dEditPixelX_2 = pPosData->dPixelX;
 					m_dEditPixelY_2 = pPosData->dPixelY;
 					bProcess &= pPosData->bProcsss;
 				}
-				else if (pPosData->nIndex == PanelPosition_Addition)
+				else if (pPosData->nPosMode == PanelPosition_Addition)
 				{
 					m_dEditPixelX_3 = pPosData->dPixelX;
 					m_dEditPixelY_3 = pPosData->dPixelY;
@@ -261,8 +339,41 @@
 				}
 			}
 
-			m_dEditTheta = bProcess ? pResult->GetGantryDegree() : 0.;
+			m_dEditLeftTheta = bProcess ? pResult->GetGantryDegree() : 0.;
+
+			pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(1);
+			if (pResult == NULL) return;
+
+			bProcess = FALSE;
+			for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
+			{
+				const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx+3);
+				if (pPosData == NULL) continue;
+
+				if (pPosData->nPosMode == PanelPosition_Base)
+				{
+					m_dEditPixelX_4 = pPosData->dPixelX;
+					m_dEditPixelY_4 = pPosData->dPixelY;
+					bProcess = pPosData->bProcsss;
+				}
+				else if (pPosData->nPosMode == PanelPosition_Sub)
+				{
+					m_dEditPixelX_5 = pPosData->dPixelX;
+					m_dEditPixelY_5 = pPosData->dPixelY;
+					bProcess &= pPosData->bProcsss;
+				}
+				else if (pPosData->nPosMode == PanelPosition_Addition)
+				{
+					m_dEditPixelX_6 = pPosData->dPixelX;
+					m_dEditPixelY_6 = pPosData->dPixelY;
+					bProcess &= pPosData->bProcsss;
+				}
+			}
+
+			m_dEditRightTheta = bProcess ? pResult->GetGantryDegree() : 0.;
 		}
+
+		const CDiagnosisResult* pStandardResult = pSettingInfo->GetSettingResult_Squareness(0);
 
 		// info : motor position
 		for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
@@ -284,6 +395,30 @@
 			{
 				m_dEditMotorX_3 = pPosData->dPosX;
 				m_dEditMotorY_3 = pPosData->dPosY;
+			}
+		}
+
+		pStandardResult = pSettingInfo->GetSettingResult_Squareness(1);
+
+		for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
+		{
+			const SPositionData* pPosData = pStandardResult->GetPositionData_Squareness(nPIdx);
+			if (pPosData == NULL) continue;
+
+			if (pPosData->nIndex == PanelPosition_Base)
+			{
+				m_dEditMotorX_4 = pPosData->dPosX;
+				m_dEditMotorY_4 = pPosData->dPosY;
+			}
+			else if (pPosData->nIndex == PanelPosition_Sub)
+			{
+				m_dEditMotorX_5 = pPosData->dPosX;
+				m_dEditMotorY_5 = pPosData->dPosY;
+			}
+			else if (pPosData->nIndex == PanelPosition_Addition)
+			{
+				m_dEditMotorX_6 = pPosData->dPosX;
+				m_dEditMotorY_6 = pPosData->dPosY;
 			}
 		}
 	
@@ -414,8 +549,22 @@
 void CDlgSelfDiagnosis_Squareness::OnBnClickedButtonSimulation2()
 {
 	// TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎.
+
 	if (m_pDiagnosisManager == NULL) return;
 
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+	if (m_pDiagnosisManager->CheckManualMode() == FALSE)
+	{
+		CString strMessage;
+		strMessage.Format(_T("Change Manual Mode!!"));
+		if (IDOK == AfxMessageBox(strMessage, MB_OK | MB_ICONERROR))
+		{
+			g_pLog->DisplayMessage(_T("Manual Diagnosis Fail! Not Manual Mode"));
+			return;
+		}
+	}
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
+
 	GetDialogControls();
 
 	m_pDiagnosisManager->RecvSignalToSignalControl(DiagnosisSignal_Manual, DiagnosisMode_Squareness, TRUE);
diff --git a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.h b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.h
index 39757e8..2f37463 100644
--- a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.h
+++ b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.h
@@ -46,7 +46,7 @@
 	CListBox m_ctrlListFileHistory;
 	CComboBox m_ctrlComboModuleIndex;
 	int m_nSelModuleIndex;
-	double m_dEditTheta;
+	double m_dEditLeftTheta;
 	double m_dEditMotorX_1;
 	double m_dEditMotorY_1; 
 	double m_dEditPixelX_1;
@@ -59,6 +59,21 @@
 	double m_dEditMotorY_3;
 	double m_dEditPixelX_3;
 	double m_dEditPixelY_3;
+	double m_dEditRightTheta;
+	double m_dEditMotorX_4;
+	double m_dEditMotorY_4;
+	double m_dEditPixelX_4;
+	double m_dEditPixelY_4;
+	double m_dEditMotorX_5;
+	double m_dEditMotorY_5;
+	double m_dEditPixelX_5;
+	double m_dEditPixelY_5;
+	double m_dEditMotorX_6;
+	double m_dEditMotorY_6;
+	double m_dEditPixelX_6;
+	double m_dEditPixelY_6;
 	CButton m_BtSumulation;
 	afx_msg void OnBnClickedButtonSimulation2();
+	double m_editFirstSettingStandard;
+	double m_editFirstSettingStandard2;
 };
diff --git a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp
index c7e498b..4c08810 100644
--- a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp
+++ b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp
@@ -16,6 +16,7 @@
 	: CDialogEx(IDD_DLG_SELF_DIAGNOSIS_WSI, pParent)
 {
 	m_pDiagnosisManager = pDiagnosisManager;
+	m_editWSIFirstStandard = 180;
 }
 
 CDlgSelfDiagnosis_Wsi::~CDlgSelfDiagnosis_Wsi()
@@ -30,6 +31,27 @@
 	DDX_Control(pDX, IDC_EDIT_WSI_RTB_00, m_ctrlWsiRtb00);
 	DDX_Control(pDX, IDC_EDIT_WSI_RTB_01, m_ctrlWsiRtb01);
 	DDX_Control(pDX, IDC_BUTTON_SIMULATION, m_btSimulation);
+	DDX_Text(pDX, IDC_EDIT_WSI_FIRST_STANDARD, m_editWSIFirstStandard);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT1, m_editWSIHeight1);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT2, m_editWSIHeight2);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT3, m_editWSIHeight3);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT4, m_editWSIHeight4);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT5, m_editWSIHeight5);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT6, m_editWSIHeight6);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT7, m_editWSIHeight7);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT8, m_editWSIHeight8);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT9, m_editWSIHeight9);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT10, m_editWSIHeight10);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT11, m_editWSIHeight11);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT12, m_editWSIHeight12);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT13, m_editWSIHeight13);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT14, m_editWSIHeight14);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT15, m_editWSIHeight15);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT16, m_editWSIHeight16);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT17, m_editWSIHeight17);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT18, m_editWSIHeight18);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT19, m_editWSIHeight19);
+	DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT20, m_editWSIHeight20);
 }
 
 
@@ -45,9 +67,20 @@
 
 void CDlgSelfDiagnosis_Wsi::OnBnClickedButtonSimulation()
 {
-	// TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎.
-	// TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎.
 	if (m_pDiagnosisManager == NULL) return;
+
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_START
+	if (m_pDiagnosisManager->CheckManualMode() == FALSE)
+	{
+		CString strMessage;
+		strMessage.Format(_T("Change Manual Mode!!"));
+		if (IDOK == AfxMessageBox(strMessage, MB_OK | MB_ICONERROR))
+		{
+			g_pLog->DisplayMessage(_T("Manual Diagnosis Fail! Not Manual Mode"));
+			return;
+		}
+	}
+	//#3514_LYW_CF AOI Review �옄媛�吏꾨떒 湲곕뒫 媛쒖꽑_END
 
 	//GetDialogControls();
 
@@ -71,19 +104,96 @@
 {
 	const CDiagnosisInfo* pSettingInfo = m_pDiagnosisManager->GetDiagnosisInfo();
 	if (pSettingInfo == NULL) return;
+
+	m_editWSIFirstStandard = pSettingInfo->GetWSIStandard();
 	
 	double nACC00 = m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->getWSI_ACC();
 	double nACC01 = m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->getWSI_ACC();
 	double nRTB00 =  m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->getWSI_RTB();
 	double nRTB01 = m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->getWSI_RTB();
 
+	double dDiagnosisHeight[20];
+
+	for (int i = 0; i < 10; i++)
+	{
+		dDiagnosisHeight[i] = m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->GetDiagnosisHeight(i);
+	}
+	for (int i = 0; i < 10; i++)
+	{
+		dDiagnosisHeight[i+10] = m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->GetDiagnosisHeight(i);
+	}
+
+	CString strDiagnosisHeight;
 	CString strACC00, strACC01;
 	CString strRTB00, strRTB01;
 	strACC00.Format(_T("%d"), nACC00);
+	strACC01.Format(_T("%d"), nACC01);
+	strRTB00.Format(_T("%d"), nRTB00);
+	strRTB01.Format(_T("%d"), nRTB01);
 	m_ctrlWsiAcc00.SetWindowTextA(strACC00);
 	m_ctrlWsiAcc01.SetWindowTextA(strACC01);
 	m_ctrlWsiRtb00.SetWindowTextA(strRTB00);
 	m_ctrlWsiRtb01.SetWindowTextA(strRTB01);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[0]);
+	m_editWSIHeight1.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[1]);
+	m_editWSIHeight2.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[2]);
+	m_editWSIHeight3.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[3]);
+	m_editWSIHeight4.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[4]);
+	m_editWSIHeight5.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[5]);
+	m_editWSIHeight6.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[6]);
+	m_editWSIHeight7.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[7]);
+	m_editWSIHeight8.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[8]);
+	m_editWSIHeight9.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[9]);
+	m_editWSIHeight10.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[10]);
+	m_editWSIHeight11.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[11]);
+	m_editWSIHeight12.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[12]);
+	m_editWSIHeight13.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[13]);
+	m_editWSIHeight14.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[14]);
+	m_editWSIHeight15.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[15]);
+	m_editWSIHeight16.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[16]);
+	m_editWSIHeight17.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[17]);
+	m_editWSIHeight18.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[18]);
+	m_editWSIHeight19.SetWindowTextA(strDiagnosisHeight);
+
+	strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[19]);
+	m_editWSIHeight20.SetWindowTextA(strDiagnosisHeight);
 	
 }
 
@@ -108,6 +218,8 @@
 	const CDiagnosisInfo* pSettingInfo = m_pDiagnosisManager->GetDiagnosisInfo();
 	if (pSettingInfo == NULL) return;
 
+	m_editWSIFirstStandard = pSettingInfo->GetWSIStandard();
+
 	double nACC00 = dAcc00;
 	double nACC01 = dAcc01;
 
diff --git a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.h b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.h
index 781a4da..22a364e 100644
--- a/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.h
+++ b/ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.h
@@ -34,4 +34,25 @@
 	CEdit m_ctrlWsiRtb00;
 	CEdit m_ctrlWsiRtb01;
 	CButton m_btSimulation;
+	double m_editWSIFirstStandard;
+	CEdit m_editWSIHeight1;
+	CEdit m_editWSIHeight2;
+	CEdit m_editWSIHeight3;
+	CEdit m_editWSIHeight4;
+	CEdit m_editWSIHeight5;
+	CEdit m_editWSIHeight6;
+	CEdit m_editWSIHeight7;
+	CEdit m_editWSIHeight8;
+	CEdit m_editWSIHeight9;
+	CEdit m_editWSIHeight10;
+	CEdit m_editWSIHeight11;
+	CEdit m_editWSIHeight12;
+	CEdit m_editWSIHeight13;
+	CEdit m_editWSIHeight14;
+	CEdit m_editWSIHeight15;
+	CEdit m_editWSIHeight16;
+	CEdit m_editWSIHeight17;
+	CEdit m_editWSIHeight18;
+	CEdit m_editWSIHeight19;
+	CEdit m_editWSIHeight20;
 };
diff --git a/ReviewSystem/ReviewSystem/ReviewInterface.cpp b/ReviewSystem/ReviewSystem/ReviewInterface.cpp
index 9c6774d..313cec6 100644
--- a/ReviewSystem/ReviewSystem/ReviewInterface.cpp
+++ b/ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -2874,24 +2874,36 @@
 
 			double dAccdata = measureResut.dAccuracy;
 			double dRbtdata = measureResut.dRepeatability;
+			double dDiagnosisHeight[10];
+
+			for (int i = 0; i < 10; i++)
+			{
+				dDiagnosisHeight[i] = measureResut.dDiagnosisHeight[i];
+			}
+
 			if (nModuleIndex == 0)
 			{
 				m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->SetACC(dAccdata);
 				m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->SetRTB(dRbtdata);
+				for (int i = 0; i < 10; i++)
+				{
+					m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->SetDiagnosisHeight(dDiagnosisHeight[i], i);
+				}
 				m_vecWSIControl[0]->SendWsiAfmSafePosMove();
 			}
 			else if (nModuleIndex == 1)
 			{
 				m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->SetACC(dAccdata);
 				m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->SetRTB(dRbtdata);
+				for (int i = 0; i < 10; i++)
+				{
+					m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->SetDiagnosisHeight(dDiagnosisHeight[i], i);
+				}
 				m_vecWSIControl[1]->SendWsiAfmSafePosMove();
 			}
 		
 
 			m_pDlgDiagnosis->m_pDlgWsi->UpdateWSIResult(nModuleIndex,dAccdata, dAccdata, dRbtdata, dRbtdata);
-			
-			
-			
 
 			m_pDlgDiagnosis->m_pDiagnosisManager->setWSIVLSIEnd(true);
 		}
@@ -3508,6 +3520,16 @@
 
 }
 
+BOOL CReviewInterface::IDP2P_CheckManualMode()
+{
+	if (IsManualProcessMode() == TRUE)
+	{
+		return TRUE;
+	}
+	
+	return FALSE;
+}
+
 int CReviewInterface::IDP2P_GetSelectedModuleIndex()
 {
 	return Module_GetSelectedModuleIndex();
diff --git a/ReviewSystem/ReviewSystem/ReviewInterface.h b/ReviewSystem/ReviewSystem/ReviewInterface.h
index 95243e2..0d9175a 100644
--- a/ReviewSystem/ReviewSystem/ReviewInterface.h
+++ b/ReviewSystem/ReviewSystem/ReviewInterface.h
@@ -209,6 +209,7 @@
 	virtual void IDP2P_MotorGo(int nModuleIdx, double dPosX, double dPosY, BOOL bWaitReturn = FALSE);
 	virtual BOOL IDP2P_GetMotionEnd(int nModuleIdx, int nTimeOut = -1);
 	virtual BOOL IDP2P_IsGantryMotionEnd(int nModuleIdx);
+	virtual BOOL IDP2P_CheckManualMode();
 	// Squareness
 	virtual int IDP2P_GetSelectedModuleIndex();
 	virtual int IDP2P_GetOrigionMotorDir();
diff --git a/ReviewSystem/ReviewSystem/ReviewSystem.rc b/ReviewSystem/ReviewSystem/ReviewSystem.rc
index 458c5c9..0a9c0ae 100644
--- a/ReviewSystem/ReviewSystem/ReviewSystem.rc
+++ b/ReviewSystem/ReviewSystem/ReviewSystem.rc
@@ -576,42 +576,72 @@
 BEGIN
     GROUPBOX        "File History",IDC_STATIC,7,286,421,86
     LISTBOX         IDC_LIST,14,297,409,69,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Data History",IDC_STATIC,292,7,136,278
-    CONTROL         "",IDC_GRID_GANTRY_DATA_HISTORY,"MFCGridCtrl",WS_TABSTOP,297,19,126,260
-    LTEXT           "Module Index :",IDC_STATIC,21,29,48,8
-    COMBOBOX        IDC_COMBO_MODULE_INDEX,71,28,48,34,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Measure Data",IDC_STATIC,7,7,280,278
-    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,98,67,37,37
-    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,98,205,37,37
-    CONTROL         IDB_BITMAP_GANTRY,IDC_STATIC,"Static",SS_BITMAP,40,70,39,168
-    LTEXT           "Theta(θ) :",IDC_STATIC,40,242,38,8
-    EDITTEXT        IDC_EDIT_GANTRY_THETA,40,253,40,14,ES_AUTOHSCROLL
-    RTEXT           "[°]",IDC_STATIC,80,255,10,8
-    LTEXT           ": Motor",IDC_STATIC,155,174,24,8
-    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X,82,116,35,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y,118,116,35,14,ES_AUTOHSCROLL
-    LTEXT           ": Pixel",IDC_STATIC,155,190,24,8
-    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X,82,132,35,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y,118,132,35,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X2,82,172,35,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y2,118,172,35,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X2,82,188,35,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y2,118,188,35,14,ES_AUTOHSCROLL
-    GROUPBOX        "Measure Data",IDC_STATIC,7,7,280,278
-    CTEXT           "X",IDC_STATIC,95,106,8,8
-    CTEXT           "Y",IDC_STATIC,130,106,8,8
-    CTEXT           "X",IDC_STATIC,96,162,8,8
-    CTEXT           "Y",IDC_STATIC,131,162,8,8
-    PUSHBUTTON      "Simulation",IDC_BUTTON_SIMULATION2,224,253,50,14
-    LTEXT           ": Motor",IDC_STATIC,245,119,24,8
-    LTEXT           ": Pixel",IDC_STATIC,245,135,24,8
-    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,189,67,37,37
-    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X3,172,116,35,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y3,208,116,35,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X3,172,132,35,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y3,208,132,35,14,ES_AUTOHSCROLL
-    CTEXT           "X",IDC_STATIC,187,106,8,8
-    CTEXT           "Y",IDC_STATIC,221,106,8,8
+    GROUPBOX        "Data History",IDC_STATIC,337,7,91,278
+    CONTROL         "",IDC_GRID_GANTRY_DATA_HISTORY,"MFCGridCtrl",WS_TABSTOP,342,19,81,260
+    COMBOBOX        IDC_COMBO_MODULE_INDEX,123,18,48,34,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+    GROUPBOX        "Measure Data",IDC_STATIC,7,7,326,278
+    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,25,59,37,37
+    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,25,197,37,37
+    LTEXT           "Left Module Theta(θ) :",IDC_STATIC,17,264,74,8
+    EDITTEXT        IDC_EDIT_GANTRY_THETA,92,262,40,14,ES_AUTOHSCROLL
+    RTEXT           "[°]",IDC_STATIC,135,264,10,8
+    LTEXT           ": Motor",IDC_STATIC,82,166,24,8
+    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X,9,108,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y,45,108,35,14,ES_AUTOHSCROLL
+    LTEXT           ": Pixel",IDC_STATIC,82,182,24,8
+    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X,9,124,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y,45,124,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X2,9,164,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y2,45,164,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X2,9,180,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y2,45,180,35,14,ES_AUTOHSCROLL
+    GROUPBOX        "Measure Data",IDC_STATIC,7,7,327,278
+    CTEXT           "X",IDC_STATIC,22,98,8,8
+    CTEXT           "Y",IDC_STATIC,57,98,8,8
+    CTEXT           "X",IDC_STATIC,23,154,8,8
+    CTEXT           "Y",IDC_STATIC,58,154,8,8
+    PUSHBUTTON      "Simulation",IDC_BUTTON_SIMULATION2,11,18,50,14
+    LTEXT           ": Motor",IDC_STATIC,156,111,24,8
+    LTEXT           ": Pixel",IDC_STATIC,156,127,24,8
+    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,100,59,37,37
+    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X3,83,108,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y3,119,108,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X3,83,124,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y3,119,124,35,14,ES_AUTOHSCROLL
+    CTEXT           "X",IDC_STATIC,98,98,8,8
+    CTEXT           "Y",IDC_STATIC,132,98,8,8
+    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,199,58,37,37
+    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,199,196,37,37
+    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X4,183,107,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y4,219,107,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X4,183,123,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y4,219,123,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X5,183,163,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y5,219,163,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X5,183,179,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y5,219,179,35,14,ES_AUTOHSCROLL
+    CTEXT           "X",IDC_STATIC,196,97,8,8
+    CTEXT           "Y",IDC_STATIC,231,97,8,8
+    CTEXT           "X",IDC_STATIC,197,153,8,8
+    CTEXT           "Y",IDC_STATIC,232,153,8,8
+    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,274,58,37,37
+    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X6,257,107,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y6,293,107,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X6,257,123,35,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y6,293,123,35,14,ES_AUTOHSCROLL
+    CTEXT           "X",IDC_STATIC,272,97,8,8
+    CTEXT           "Y",IDC_STATIC,306,97,8,8
+    GROUPBOX        "Right Module",IDC_STATIC,180,36,153,202
+    GROUPBOX        "Left Module",IDC_STATIC,7,36,173,203
+    LTEXT           "Right Module Theta(θ) :",IDC_STATIC,186,264,78,8
+    EDITTEXT        IDC_EDIT_GANTRY_THETA2,264,262,40,14,ES_AUTOHSCROLL
+    RTEXT           "[°]",IDC_STATIC,307,264,10,8
+    LTEXT           "First Setting Standard(θ) :",IDC_STATIC,18,247,83,8
+    EDITTEXT        IDC_EDIT_SQUARENESS_FIRSTSETTING,103,245,39,13,ES_AUTOHSCROLL
+    RTEXT           "[°]",IDC_STATIC,145,247,10,8
+    LTEXT           "First Setting Standard(θ) :",IDC_STATIC,185,247,83,8
+    EDITTEXT        IDC_EDIT_SQUARENESS_FIRSTSETTING2,271,245,39,13,ES_AUTOHSCROLL
+    RTEXT           "[°]",IDC_STATIC,313,247,10,8
 END
 
 IDD_DLG_SELF_DIAGNOSIS_FLATNESS DIALOGEX 0, 0, 435, 379
@@ -645,8 +675,8 @@
     GROUPBOX        "메뉴얼 조작",IDC_STATIC,18,21,80,40
     GROUPBOX        "File History",IDC_STATIC,5,245,421,86
     LISTBOX         IDC_LIST,10,257,413,69,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Data",IDC_STATIC,11,127,409,116
-    CONTROL         "ㄱ",IDC_GRID_WSI_RESULT_DATA,"MFCGridCtrl",WS_TABSTOP,17,137,400,100
+    GROUPBOX        "Data",IDC_STATIC,172,16,248,227
+    CONTROL         "ㄱ",IDC_GRID_WSI_RESULT_DATA,"MFCGridCtrl",WS_TABSTOP,409,231,6,6
     LTEXT           "Module 0",IDC_STATIC,37,80,30,8
     LTEXT           "Module 1",IDC_STATIC,37,95,30,8
     LTEXT           "ACC",IDC_STATIC,91,66,14,8
@@ -655,6 +685,71 @@
     EDITTEXT        IDC_EDIT_WSI_RTB_00,122,77,40,14,ES_AUTOHSCROLL
     EDITTEXT        IDC_EDIT_WSI_ACC_01,76,95,40,14,ES_AUTOHSCROLL
     EDITTEXT        IDC_EDIT_WSI_RTB_01,123,94,40,14,ES_AUTOHSCROLL
+    LTEXT           "WSI Standard (um)",IDC_STATIC,32,113,65,10
+    EDITTEXT        IDC_EDIT_WSI_FIRST_STANDARD,97,112,40,15,ES_AUTOHSCROLL
+    LTEXT           "um",IDC_STATIC,267,33,19,12
+    LTEXT           "WSI Height 1",IDC_STATIC,179,34,43,8
+    LTEXT           "WSI Height 2",IDC_STATIC,179,48,43,8
+    LTEXT           "WSI Height 3",IDC_STATIC,179,62,43,8
+    LTEXT           "WSI Height 4",IDC_STATIC,179,76,43,8
+    LTEXT           "WSI Height 5",IDC_STATIC,179,90,43,8
+    LTEXT           "WSI Height 6",IDC_STATIC,179,104,43,8
+    LTEXT           "WSI Height 7",IDC_STATIC,179,117,43,8
+    LTEXT           "WSI Height 8",IDC_STATIC,179,132,43,8
+    LTEXT           "WSI Height 9",IDC_STATIC,179,145,43,8
+    LTEXT           "WSI Height 10",IDC_STATIC,179,158,47,8
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT1,227,33,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT2,227,47,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT3,227,61,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT4,226,75,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT5,226,89,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT6,226,103,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT7,226,117,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT8,226,131,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT9,226,145,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT10,226,158,39,12,ES_AUTOHSCROLL
+    LTEXT           "um",IDC_STATIC,148,121,19,12
+    LTEXT           "um",IDC_STATIC,267,47,19,12
+    LTEXT           "um",IDC_STATIC,267,61,19,12
+    LTEXT           "um",IDC_STATIC,267,75,19,12
+    LTEXT           "um",IDC_STATIC,267,89,19,12
+    LTEXT           "um",IDC_STATIC,267,103,19,12
+    LTEXT           "um",IDC_STATIC,267,117,19,12
+    LTEXT           "um",IDC_STATIC,267,131,19,12
+    LTEXT           "um",IDC_STATIC,267,145,19,12
+    LTEXT           "um",IDC_STATIC,267,159,19,12
+    LTEXT           "um",IDC_STATIC,387,33,19,12
+    LTEXT           "WSI Height 1",IDC_STATIC,299,34,43,8
+    LTEXT           "WSI Height 2",IDC_STATIC,299,48,43,8
+    LTEXT           "WSI Height 3",IDC_STATIC,299,62,43,8
+    LTEXT           "WSI Height 4",IDC_STATIC,299,76,43,8
+    LTEXT           "WSI Height 5",IDC_STATIC,299,90,43,8
+    LTEXT           "WSI Height 6",IDC_STATIC,299,104,43,8
+    LTEXT           "WSI Height 7",IDC_STATIC,299,117,43,8
+    LTEXT           "WSI Height 8",IDC_STATIC,299,132,43,8
+    LTEXT           "WSI Height 9",IDC_STATIC,299,145,43,8
+    LTEXT           "WSI Height 10",IDC_STATIC,299,158,47,8
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT11,347,33,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT12,347,47,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT13,347,61,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT14,346,75,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT15,346,89,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT16,346,103,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT17,346,117,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT18,346,131,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT19,346,145,39,12,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_HEIGHT20,346,158,39,12,ES_AUTOHSCROLL
+    LTEXT           "um",IDC_STATIC,387,47,19,12
+    LTEXT           "um",IDC_STATIC,387,61,19,12
+    LTEXT           "um",IDC_STATIC,387,75,19,12
+    LTEXT           "um",IDC_STATIC,387,89,19,12
+    LTEXT           "um",IDC_STATIC,387,103,19,12
+    LTEXT           "um",IDC_STATIC,387,117,19,12
+    LTEXT           "um",IDC_STATIC,387,131,19,12
+    LTEXT           "um",IDC_STATIC,387,145,19,12
+    LTEXT           "um",IDC_STATIC,387,159,19,12
+    GROUPBOX        "Left",IDC_STATIC,176,24,105,154
+    GROUPBOX        "Right",IDC_STATIC,296,24,105,154
 END
 
 IDD_DLG_SELF_DIAGNOSIS_SETTING DIALOGEX 0, 0, 435, 379
@@ -666,12 +761,12 @@
     LTEXT           "파일 위치 :",IDC_STATIC,18,36,31,8
     PUSHBUTTON      "Save",IDC_BUTTON_SAVE,371,351,50,14
     PUSHBUTTON      "Load",IDC_BUTTON_LOAD,320,351,50,14
-    EDITTEXT        IDC_EDIT_PANEL_COUNT_SQUARENESS,67,94,40,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_CAMERA_RESOLUTION,183,94,40,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_JUDGE_DATA_DEGREE,67,111,40,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_MODULE_COUNT,67,127,40,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_CAMERA_FRAME_WIDTH,183,111,40,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_CAMERA_FRAME_HEIGHT,183,127,40,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_PANEL_COUNT_SQUARENESS,67,81,40,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_CAMERA_RESOLUTION,183,81,40,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_JUDGE_DATA_DEGREE,67,97,40,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_MODULE_COUNT,67,113,40,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_CAMERA_FRAME_WIDTH,183,96,40,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_CAMERA_FRAME_HEIGHT,183,112,40,14,ES_AUTOHSCROLL
     EDITTEXT        IDC_EDIT_REVIEW_PANEL_POS_X,43,184,40,14,ES_AUTOHSCROLL
     EDITTEXT        IDC_EDIT_REVIEW_PANEL_POS_Y,85,184,40,14,ES_AUTOHSCROLL
     EDITTEXT        IDC_EDIT_REVIEW_PANEL_POS_X3,43,200,40,14,ES_AUTOHSCROLL
@@ -685,47 +780,47 @@
     EDITTEXT        IDC_EDIT_REVIEW_PANEL_POS_X6,151,216,40,14,ES_AUTOHSCROLL
     EDITTEXT        IDC_EDIT_REVIEW_PANEL_POS_Y6,193,216,40,14,ES_AUTOHSCROLL
     EDITTEXT        IDC_EDIT_PANEL_COUNT_WSI,330,94,40,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_JUDGE_DATA_3SIGMA,330,111,40,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_JUDGE_DATA_3SIGMA,330,113,40,14,ES_AUTOHSCROLL
     EDITTEXT        IDC_EDIT_WSI_PANEL_POS_X,294,181,40,14,ES_AUTOHSCROLL
     EDITTEXT        IDC_EDIT_WSI_PANEL_POS_Y,336,181,40,14,ES_AUTOHSCROLL
     EDITTEXT        IDC_EDIT_WSI_PANEL_POS_X2,294,197,40,14,ES_AUTOHSCROLL
     EDITTEXT        IDC_EDIT_WSI_PANEL_POS_Y2,336,197,40,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_AF_DELAY,67,268,40,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_JUDGE_DATA_Z_RANGE,67,284,40,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_GLASS_SIZE_X,183,268,40,14,ES_AUTOHSCROLL
-    EDITTEXT        IDC_EDIT_GLASS_SIZE_Y,183,284,40,14,ES_AUTOHSCROLL
-    COMBOBOX        IDC_COMBO_FLANTESS_MODE,67,308,48,62,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
-    GROUPBOX        "Setting",IDC_STATIC,7,60,414,282
-    RTEXT           "Resolution :",IDC_STATIC,143,96,39,8
-    RTEXT           "Panel Count :",IDC_STATIC,23,96,43,8
-    RTEXT           "Judge Data :",IDC_STATIC,26,114,40,10
-    RTEXT           "AF Delay :",IDC_STATIC,34,273,32,8
-    RTEXT           "Judge Data :\n(Z Range)",IDC_STATIC,24,287,42,21
-    RTEXT           "Mode :",IDC_STATIC,43,309,23,8
-    RTEXT           "Range Count :",IDC_STATIC,136,309,46,8
-    RTEXT           "GlassSizeX :",IDC_STATIC,146,273,36,8
-    RTEXT           "GlassSizeY :",IDC_STATIC,145,287,37,8
+    EDITTEXT        IDC_EDIT_AF_DELAY,67,275,40,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_JUDGE_DATA_Z_RANGE,67,291,40,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GLASS_SIZE_X,183,275,40,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_GLASS_SIZE_Y,183,291,40,14,ES_AUTOHSCROLL
+    COMBOBOX        IDC_COMBO_FLANTESS_MODE,67,315,48,62,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
+    GROUPBOX        "Setting",IDC_STATIC,7,67,414,282
+    RTEXT           "Resolution :",IDC_STATIC,143,84,39,8
+    RTEXT           "Panel Count :",IDC_STATIC,23,83,43,8
+    RTEXT           "Judge Data :",IDC_STATIC,26,101,40,10
+    RTEXT           "AF Delay :",IDC_STATIC,34,280,32,8
+    RTEXT           "Judge Data :\n(Z Range)",IDC_STATIC,24,294,42,21
+    RTEXT           "Mode :",IDC_STATIC,43,316,23,8
+    RTEXT           "Range Count :",IDC_STATIC,136,316,46,8
+    RTEXT           "GlassSizeX :",IDC_STATIC,146,280,36,8
+    RTEXT           "GlassSizeY :",IDC_STATIC,145,294,37,8
     RTEXT           "Panel Count : ",IDC_STATIC,286,96,43,8
     RTEXT           "Judge Data :\n(3sigma)  ",IDC_STATIC,287,114,42,17
-    GROUPBOX        "직각도",IDC_STATIC,15,83,233,166
-    GROUPBOX        "평탄도",IDC_STATIC,15,253,233,80
-    EDITTEXT        IDC_EDIT_RANGE_COUNT_FLATNESS,183,308,40,14,ES_AUTOHSCROLL | WS_DISABLED
+    GROUPBOX        "직각도",IDC_STATIC,15,75,233,176
+    GROUPBOX        "평탄도",IDC_STATIC,15,252,233,80
+    EDITTEXT        IDC_EDIT_RANGE_COUNT_FLATNESS,183,315,40,14,ES_AUTOHSCROLL | WS_DISABLED
     GROUPBOX        "WSI",IDC_STATIC,254,83,164,146
-    RTEXT           "Frame Width :",IDC_STATIC,135,114,47,8
-    RTEXT           "Frame Height :",IDC_STATIC,127,131,55,8
+    RTEXT           "Frame Width :",IDC_STATIC,135,99,47,8
+    RTEXT           "Frame Height :",IDC_STATIC,127,115,55,8
     RTEXT           "[nm]",IDC_STATIC,372,114,16,8
-    RTEXT           "[um]",IDC_STATIC,226,97,16,8
+    RTEXT           "[um]",IDC_STATIC,226,81,16,8
+    RTEXT           "[px]",IDC_STATIC,226,99,14,8
     RTEXT           "[px]",IDC_STATIC,226,114,14,8
-    RTEXT           "[px]",IDC_STATIC,226,129,14,8
-    RTEXT           "[°]",IDC_STATIC,109,114,10,8
-    LTEXT           "[ms]",IDC_STATIC,109,273,15,8
-    LTEXT           "[um]",IDC_STATIC,109,287,16,8
-    LTEXT           "[ea]",IDC_STATIC,226,311,14,8
-    LTEXT           "[mm]",IDC_STATIC,226,273,18,8
-    LTEXT           "[mm]",IDC_STATIC,226,287,18,8
-    LTEXT           "[ea]",IDC_STATIC,109,97,14,8
+    RTEXT           "[°]",IDC_STATIC,109,99,10,8
+    LTEXT           "[ms]",IDC_STATIC,109,280,15,8
+    LTEXT           "[um]",IDC_STATIC,109,294,16,8
+    LTEXT           "[ea]",IDC_STATIC,226,318,14,8
+    LTEXT           "[mm]",IDC_STATIC,226,280,18,8
+    LTEXT           "[mm]",IDC_STATIC,226,294,18,8
+    LTEXT           "[ea]",IDC_STATIC,109,84,14,8
     LTEXT           "[ea]",IDC_STATIC,373,97,14,8
-    RTEXT           "ModuleCount :",IDC_STATIC,20,131,46,8
+    RTEXT           "ModuleCount :",IDC_STATIC,20,117,46,8
     CTEXT           "Module1 Panel",IDC_STATIC,62,163,46,8
     GROUPBOX        "Panel Motor Position",IDC_STATIC,22,148,218,94
     CTEXT           "1",IDC_STATIC,34,186,8,8
@@ -745,6 +840,17 @@
     CTEXT           "2",IDC_STATIC,284,200,8,8
     CTEXT           "3",IDC_STATIC,34,219,8,8
     CTEXT           "3",IDC_STATIC,141,219,8,8
+    CONTROL         "Use Skip Mode",IDC_CHECK_SELF_DIAGNOSIS_FLATNESS_SKIP,
+                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,66,260,62,10
+    LTEXT           "Left Standard :",IDC_STATIC,17,133,49,9
+    LTEXT           "Standard :",IDC_STATIC,296,135,33,9
+    EDITTEXT        IDC_EDIT_SQUARENESS_STANDARD,67,130,40,14,ES_AUTOHSCROLL
+    EDITTEXT        IDC_EDIT_WSI_STANDARD,330,132,40,14,ES_AUTOHSCROLL
+    RTEXT           "[nm]",IDC_STATIC,372,134,16,8
+    RTEXT           "[°]",IDC_STATIC,108,133,10,8
+    LTEXT           "Right Standard :",IDC_STATIC,131,132,53,9
+    EDITTEXT        IDC_EDIT_SQUARENESS_STANDARD2,183,130,40,14,ES_AUTOHSCROLL
+    RTEXT           "[°]",IDC_STATIC,226,132,10,8
 END
 
 IDD_DLG_TAB_DEFECT_INFO DIALOGEX 0, 0, 539, 282
diff --git a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
index 80e14e9..4c7a1f9 100644
--- a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
+++ b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -8713,14 +8713,22 @@
 	break;
 	case PCControlRecv_Autodiagnosis:
 	{
-		m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Signal] Diagno start => %d"), bSignalOn);
+		//#3514_LYW_CF AOI Review 자가진단 기능 개선_START
+		CSignalControl* pSignalControl = m_pSP2P->ISP2P_GetSignalControl();
+		CString strDiagnosisMode;
+		pSignalControl->ReadData(_T("11160"), 2, strDiagnosisMode);
+		int nDiagnosisMode = atoi(strDiagnosisMode);
+		//#3514_LYW_CF AOI Review 자가진단 기능 개선_END
+
+		m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Signal] Diagno start => %d, DiagnosisMode => %d"), bSignalOn, nDiagnosisMode);
 		if (bSignalOn) {
 			bResult = SendSignalToSignalControl(PCControlSendSignalIndex_DiagnoAck, 0);
 			
 			m_pSP2P->ISP2P_GetDlgDiagnosis()->ShowWindow(SW_SHOW);
 			
-			m_pSP2P->ISP2P_GetDiagnosisManager()->RecvSignalToSignalControl(0, 0);
+			m_pSP2P->ISP2P_GetDiagnosisManager()->RecvSignalToSignalControl(0, nDiagnosisMode);
 		}
+		//#3514_LYW_CF AOI Review 자가진단 기능 개선_END
 		else
 			bResult = SendSignalOffToSignalControl(PCControlSendSignalIndex_DiagnoAck, 0);
 
diff --git a/ReviewSystem/ReviewSystem/resource.h b/ReviewSystem/ReviewSystem/resource.h
index 5ff1b94..0ae58b7 100644
--- a/ReviewSystem/ReviewSystem/resource.h
+++ b/ReviewSystem/ReviewSystem/resource.h
@@ -87,6 +87,7 @@
 #define IDC_BUTTON_UI_LEFT              1004
 #define IDC_CHECK_OFFSET_MODE           1004
 #define IDC_IMAGE_ROTATION              1004
+#define IDC_CHECK_SELF_DIAGNOSIS_FLATNESS_SKIP 1004
 #define IDC_SLIDER1                     1005
 #define IDC_SLIDER_LIGHT_LEVEL          1005
 #define IDC_RADIO_MAP_TYPE_0            1005
@@ -251,31 +252,45 @@
 #define IDC_EDIT4                       1088
 #define IDC_EDIT_PANEL_COUNT_SQUARENESS 1089
 #define IDC_EDIT_SCAN_COUNT             1089
+#define IDC_EDIT_WSI_HEIGHT4            1089
 #define IDC_BUTTON_GLASS_GO_XY          1090
 #define IDC_EDIT_REVIEW_CAMCOUNT        1090
+#define IDC_EDIT_WSI_HEIGHT5            1090
 #define IDC_BUTTON_TEST1                1091
 #define IDC_KEY_JOD_MOVE                1091
 #define IDC_EDIT_JUDGE_DATA_Z_RANGE     1091
 #define IDC_EDIT16                      1091
 #define IDC_EDIT_SETTINGFILE_PATH       1091
+#define IDC_EDIT_WSI_HEIGHT6            1091
 #define IDC_BUTTON_GLASS_GO_XY3         1092
 #define IDC_BUTTON_TEST2                1092
 #define IDC_EDIT_XPOS_COUNT             1092
+#define IDC_EDIT_WSI_HEIGHT7            1092
 #define IDC_CHECK_AFM_TRACK             1093
 #define IDC_EDIT_RANGE_COUNT_FLATNESS   1093
+#define IDC_EDIT_WSI_HEIGHT8            1093
 #define IDC_BUTTON_GLASS_GO_XY2         1094
 #define IDC_BUTTON_GLASSCENTER_GO_XY    1094
 #define IDC_EDIT_GLASS_SIZE_X           1094
+#define IDC_EDIT_WSI_HEIGHT9            1094
 #define IDC_EDIT_GLASS_SIZE_Y           1095
+#define IDC_EDIT_WSI_HEIGHT10           1095
 #define IDC_EDIT_PANEL_COUNT_WSI        1096
+#define IDC_EDIT_WSI_HEIGHT14           1096
 #define IDC_EDIT_JUDGE_DATA_3SIGMA      1097
+#define IDC_EDIT_WSI_HEIGHT15           1097
 #define IDC_EDIT_WSI_PANEL_POS_X        1098
+#define IDC_EDIT_WSI_HEIGHT16           1098
 #define IDC_EDIT_WSI_PANEL_POS_Y        1099
+#define IDC_EDIT_WSI_HEIGHT17           1099
 #define IDC_STATIC_JOG_SPEED            1100
 #define IDC_EDIT_WSI_PANEL_POS_X2       1100
+#define IDC_EDIT_WSI_HEIGHT18           1100
 #define IDC_STATIC_LIGHT_LEVEL          1101
 #define IDC_EDIT_WSI_PANEL_POS_Y2       1101
+#define IDC_EDIT_WSI_HEIGHT19           1101
 #define IDC_EDIT_REVIEW_PANEL_POS_X     1102
+#define IDC_EDIT_WSI_HEIGHT20           1102
 #define IDC_EDIT_REVIEW_PANEL_POS_Y     1103
 #define IDC_RADIO_ZOOM_LEVEL_4          1104
 #define IDC_EDIT_REVIEW_PANEL_POS_X2    1104
@@ -352,6 +367,7 @@
 #define IDC_EDIT_GANTRY_THETA           1142
 #define IDC_GRID_GANTRY_DATA_HISTORY    1143
 #define IDC_EDIT_MODULE_COUNT           1144
+#define IDC_EDIT_GANTRY_THETA2          1144
 #define IDC_EDIT_GANTRY_MOTOR_X         1145
 #define IDC_GRID_WSI_RESULT_DATA        1145
 #define IDC_EDIT_GANTRY_MOTOR_Y         1146
@@ -376,20 +392,44 @@
 #define IDC_EDIT_GANTRY_PIXEL_Y3        1156
 #define IDC_EDIT_CHANGE_TARGET_XPOS     1156
 #define IDC_EDIT_CHANGE_TARGET_YPOS     1157
+#define IDC_EDIT_GANTRY_MOTOR_X4        1157
 #define IDC_BUTTON5                     1158
+#define IDC_EDIT_GANTRY_MOTOR_Y4        1158
 #define IDC_EDIT_OFFSET_Y_VALUE         1159
+#define IDC_EDIT_GANTRY_PIXEL_X4        1159
 #define IDC_EDIT_CAMERA_COUNT           1160
+#define IDC_EDIT_GANTRY_PIXEL_Y4        1160
 #define IDC_PROGRESS_PROCESS            1161
+#define IDC_EDIT_GANTRY_MOTOR_X5        1161
 #define IDC_EDIT_MOTOR_XPOS             1162
+#define IDC_EDIT_GANTRY_MOTOR_Y5        1162
 #define IDC_EDIT_MOTOR_YPOS             1163
+#define IDC_EDIT_GANTRY_PIXEL_X5        1163
 #define IDC_BUTTON6                     1164
+#define IDC_EDIT_GANTRY_PIXEL_Y5        1164
 #define IDC_TAB_HISTORY_CONTROL         1165
+#define IDC_EDIT_GANTRY_MOTOR_X6        1165
 #define IDC_LIST_HISTORY_DEFECT         1166
+#define IDC_EDIT_GANTRY_MOTOR_Y6        1166
+#define IDC_EDIT_GANTRY_PIXEL_X6        1167
 #define IDC_STATIC_MAP                  1168
+#define IDC_EDIT_GANTRY_PIXEL_Y6        1168
 #define IDC_GRID_ALIGN_ORIGIN_INFO      1170
 #define IDC_GRID_ALIGN_HISTORY_INFO     1171
 #define IDC_ALIGN_GRID_ORIGIN_INFO      1173
 #define IDC_ALIGN_GRID_ALIGN_INFO       1174
+#define IDC_EDIT_SQUARENESS_STANDARD    1175
+#define IDC_EDIT_WSI_STANDARD           1176
+#define IDC_EDIT_SQUARENESS_FIRSTSETTING 1176
+#define IDC_EDIT_WSI_FIRST_STANDARD     1177
+#define IDC_EDIT_SQUARENESS_STANDARD2   1177
+#define IDC_EDIT_SQUARENESS_FIRSTSETTING2 1177
+#define IDC_EDIT_WSI_HEIGHT1            1178
+#define IDC_EDIT_WSI_HEIGHT2            1179
+#define IDC_EDIT_WSI_HEIGHT3            1180
+#define IDC_EDIT_WSI_HEIGHT11           1181
+#define IDC_EDIT_WSI_HEIGHT12           1182
+#define IDC_EDIT_WSI_HEIGHT13           1183
 #define ID_INS_HOOK                     32772
 #define ID_UNINS_HOOK                   32773
 
@@ -399,7 +439,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        381
 #define _APS_NEXT_COMMAND_VALUE         32775
-#define _APS_NEXT_CONTROL_VALUE         1175
+#define _APS_NEXT_CONTROL_VALUE         1181
 #define _APS_NEXT_SYMED_VALUE           346
 #endif
 #endif
diff --git a/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisInfo.h b/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisInfo.h
index 7392af9..8de970b 100644
--- a/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisInfo.h
+++ b/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisInfo.h
@@ -22,8 +22,9 @@
 
 enum DiagnosisMode {
 	DiagnosisMode_All = 0,
-	DiagnosisMode_Squareness,
+	DiagnosisMode_Review,
 	DiagnosisMode_Wsi,
+	DiagnosisMode_Squareness,
 	DiagnosisMode_Flatness,
 	DiagnosisMode_Flatness_Manual,
 	DiagnosisMode_Simulation
@@ -63,6 +64,8 @@
 	virtual BOOL IDP2P_SetDlgFlatness(int nIndex) = 0;
 	virtual BOOL IDP2P_SetDialogTap(int nIndex) = 0;
 	virtual void IDP2P_UpdateDialog(int nIndex = -1) = 0;
+
+	virtual BOOL IDP2P_CheckManualMode() = 0;
 };
 
 struct SPositionData
@@ -129,6 +132,7 @@
 	void			SetHeight3Sigma(double dData)			{ m_dHeight3Sigma = dData; }
 	void			SetACC(double dData) { m_dACC = dData; }
 	void			SetRTB(double dData) { m_dRTB = dData; }
+	void			SetDiagnosisHeight(double dData, int idx) { m_dDiagnosisHeight[idx] = dData; }
 
 	// getter
 	int						GetModuleIndex() const { return m_nModuleIndex; }
@@ -148,6 +152,8 @@
 	double					GetHeight3Sigma() const { return m_dHeight3Sigma; }
 	double					getWSI_ACC() const {return m_dACC;}
 	double					getWSI_RTB() const { return m_dRTB; }
+	double					GetDiagnosisHeight(int idx) const { return m_dDiagnosisHeight[idx];  }
+
 protected:
 	int				m_nModuleIndex;
 
@@ -167,6 +173,7 @@
 	double			m_dHeight3Sigma;
 	double			m_dACC;
 	double          m_dRTB;
+	double		    m_dDiagnosisHeight[10];
 };
 typedef std::vector<CDiagnosisResult>				VectorDiagnosisResult;
 typedef std::vector<CDiagnosisResult>::iterator		VectorDiagnosisResultIt;
@@ -188,6 +195,7 @@
 		m_dCameraResolution = 0.;
 		m_nPanelCount_Squareness = 0;
 		m_dJudgeData_Degree = 0.;
+		m_dSquarenessStandard = 0.;
 
 		m_dataSettingResult_Flatness.Reset();
 		m_nAFDelay = 0;
@@ -199,6 +207,7 @@
 		m_vecSettingResult_Wsi.clear();
 		m_nPanelCount_Wsi = 0;
 		m_dJudgeData_3Sigma = 0.;
+		m_dWSIStandard = 0.;
 
 		m_dPanelPosX = 0;
 		m_dPanelPosY = 0;
@@ -215,6 +224,9 @@
 		m_dReviewPanelPosY2 = 0;
 		m_dReviewPanelPosX4 = 0;
 		m_dReviewPanelPosY4 = 0;
+		//#3514_LYW_CF AOI Review 자가진단 기능 개선_START
+		m_nFlatnessSkipMode = 0;
+		//#3514_LYW_CF AOI Review 자가진단 기능 개선_END
 
 	}
 
@@ -237,10 +249,16 @@
 	void					SetPanelCount_Wsi(int nCount) { m_nPanelCount_Wsi = nCount; }
 	void					SetJudgeData_3Sigma(double dData) { m_dJudgeData_3Sigma = dData; }
 
-	void					GetPanelPosX_Wsi(double dData) { m_dPanelPosX = dData; }
-	void					GetPanelPosY_Wsi(double dData) {  m_dPanelPosY = dData; }
-	void					GetPanelPosX2_Wsi(double dData) { m_dPanelPosX2 = dData; }
-	void					GetPanelPosY2_Wsi(double dData) { m_dPanelPosY2 = dData; }
+	void					SetPanelPosX_Wsi(double dData) { m_dPanelPosX = dData; }
+	void					SetPanelPosY_Wsi(double dData) {  m_dPanelPosY = dData; }
+	void					SetPanelPosX2_Wsi(double dData) { m_dPanelPosX2 = dData; }
+	void					SetPanelPosY2_Wsi(double dData) { m_dPanelPosY2 = dData; }
+	//#3514_LYW_CF AOI Review 자가진단 기능 개선_START
+	void					SetFlastnessSkipMode(double dData) { m_nFlatnessSkipMode = dData; }
+	void					SetSquarenessStandard(double dData) { m_dSquarenessStandard = dData; }
+	void					SetSquarenessStandard2(double dData) { m_dSquarenessStandard2 = dData; }
+	void					SetWSIStandard(double dData) { m_dWSIStandard = dData; }
+	//#3514_LYW_CF AOI Review 자가진단 기능 개선_END
 
 
 	// getter
@@ -272,6 +290,12 @@
 	double					GetPanelPosY_Wsi() const { return m_dPanelPosY; }
 	double					GetPanelPosX2_Wsi() const { return m_dPanelPosX2; }
 	double					GetPanelPosY2_Wsi() const { return m_dPanelPosY2; }
+	//#3514_LYW_CF AOI Review 자가진단 기능 개선_START
+	int					    GetFlastnessSkipMode() const { return m_nFlatnessSkipMode; }
+	double					GetSquarenessStandard() const { return m_dSquarenessStandard; }
+	double					GetSquarenessStandard2() const { return m_dSquarenessStandard2; }
+	double					GetWSIStandard() const { return m_dWSIStandard; }
+	//#3514_LYW_CF AOI Review 자가진단 기능 개선_END
 	//Review
 public:
 	double					GetReviewPanelPosX() const { return m_dReviewPanelPosX; }
@@ -300,6 +324,10 @@
 	int							m_nCameraFrameHeight;
 	double						m_dCameraResolution;
 	double						m_dJudgeData_Degree;
+	//#3514_LYW_CF AOI Review 자가진단 기능 개선_START
+	double						m_dSquarenessStandard;
+	double						m_dSquarenessStandard2;
+	//#3514_LYW_CF AOI Review 자가진단 기능 개선_END
 
 	// Flatness
 	CDiagnosisResult			m_dataSettingResult_Flatness;		// single data
@@ -309,11 +337,17 @@
 	int							m_nRangeCount_Flatness;
 	int							m_nGlassSizeX;
 	int							m_nGlassSizeY;
+	//#3514_LYW_CF AOI Review 자가진단 기능 개선_START
+	int							m_nFlatnessSkipMode;
+    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
 
 	// wsi
 	VectorDiagnosisResult		m_vecSettingResult_Wsi;		// add module count
 	int							m_nPanelCount_Wsi;
 	double						m_dJudgeData_3Sigma;
+	//#3514_LYW_CF AOI Review 자가진단 기능 개선_START
+	double						m_dWSIStandard;
+	//#3514_LYW_CF AOI Review 자가진단 기능 개선_END
 
 	double						m_dPanelPosX;
 	double						m_dPanelPosY;
diff --git a/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisManager.h b/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisManager.h
index 8a2e785..95bc66b 100644
--- a/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisManager.h
+++ b/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisManager.h
@@ -40,6 +40,8 @@
 
 	BOOL MakeDirectory(CString strPath);
 
+	BOOL CheckManualMode();
+
 	// setter
 	void SetExistStandardData(BOOL bExist = TRUE) { m_bExistStandardData = bExist; }
 	int SetDiagnosisResultCount_Squareness(int nCount);
diff --git a/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisProcessor.h b/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisProcessor.h
index 23ee814..d2dac1a 100644
--- a/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisProcessor.h
+++ b/ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisProcessor.h
@@ -49,6 +49,7 @@
 	int ProcessFlatness();
 	int ProcessFlatness_Manual();
 	int ProcessSimulation();
+	int ProcessDiagnosisJudge();
 
 	BOOL CalculateSquareness(int nIndex);
 protected:

--
Gitblit v1.9.3