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

---
 ReviewSystem/ReviewSystem/ReviewInterface.cpp |  517 +++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 371 insertions(+), 146 deletions(-)

diff --git a/ReviewSystem/ReviewSystem/ReviewInterface.cpp b/ReviewSystem/ReviewSystem/ReviewInterface.cpp
index 73bc99f..396ee3f 100644
--- a/ReviewSystem/ReviewSystem/ReviewInterface.cpp
+++ b/ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -585,110 +585,176 @@
 void CReviewInterface::threadSet3rdPartyProgramVersion(void* pArg)
 {
 	CReviewInterface* pThis = (CReviewInterface*)pArg;
-	//LYW0412
-	BOOL bReturn, bRetFTPUploader = FALSE, bRetGRM = FALSE, bRetSync = FALSE;
-	CFileFind finder;
-	CTime timeLastWrite;
-	TCHAR currentPath[MAX_PATH];
-	DWORD dwPid;
-	HWND hWnd;
-	HANDLE hHandle;
-	CString strTemp;
+	/*< SWK 20221222 - #4403 MOD Start >*/
+//	//LYW0412
+//	BOOL bReturn, bRetFTPUploader = FALSE, bRetGRM = FALSE, bRetSync = FALSE;
+// 	CFileFind finder;
+// 	CTime timeLastWrite;
+// 	TCHAR currentPath[MAX_PATH];
+// 	DWORD dwPid;
+// 	HWND hWnd;
+// 	HANDLE hHandle;
+// 	CString strTemp;
+// 
+// 	while ((bRetFTPUploader&bRetGRM&bRetSync) != TRUE) 
+// 	{
+// 		bReturn = FALSE;
+// 
+// 		//FTPUploader S/W Version Start
+// 		if (bRetFTPUploader == FALSE)
+// 		{
+// 			dwPid = 0;
+// 			hWnd = ::FindWindow(NULL, _T("FTPUploader"));
+// 			GetWindowThreadProcessId(hWnd, &dwPid);
+// 			hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid);
+// 			ZeroMemory(currentPath, MAX_PATH);
+// 			GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH);
+// 
+// 			bReturn = finder.FindFile(currentPath);
+// 		}
+// 
+// 		while (bReturn)
+// 		{
+// 			bReturn = finder.FindNextFile();
+// 
+// 			if (finder.IsDots()) continue;
+// 			if (finder.IsDirectory()) continue;
+// 
+// 			finder.GetLastWriteTime(timeLastWrite);
+// 			strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay());
+// 			pThis->m_nFDCFTPUploaderSWVersion = atoi(strTemp);
+// 			g_pLog->DisplayMessage(_T("FDCFTPUploaderSWVersion = %d "), pThis->m_nFDCFTPUploaderSWVersion);
+// 			bRetFTPUploader = TRUE;
+// 		}
+// 		//FTPUploader S/W Version End
+// 
+// 		bReturn = FALSE;
+// 
+// 		//Dit Glass Raw Messenger S/W Version Start
+// 		if (bRetGRM == FALSE)
+// 		{
+// 			dwPid = 0;
+// 			hWnd = ::FindWindow(NULL, _T("Dit Glass Raw Messenger"));
+// 			GetWindowThreadProcessId(hWnd, &dwPid);
+// 			hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid);
+// 			ZeroMemory(currentPath, MAX_PATH);
+// 			GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH);
+// 
+// 			bReturn = finder.FindFile(currentPath);
+// 		}
+// 
+// 		while (bReturn)
+// 		{
+// 			bReturn = finder.FindNextFile();
+// 
+// 			if (finder.IsDots()) continue;
+// 			if (finder.IsDirectory()) continue;
+// 
+// 			finder.GetLastWriteTime(timeLastWrite);
+// 			strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay());
+// 			pThis->m_nFDCGRMSWVersion = atoi(strTemp);
+// 			g_pLog->DisplayMessage(_T("FDCGRMSWVersion = %d "), pThis->m_nFDCGRMSWVersion);
+// 			bRetGRM = TRUE;
+// 		}
+// 		//Dit Glass Raw Messenger S/W Version End
+// 
+// 		bReturn = FALSE;
+// 
+// 		//Dit Shared Memory Sync Client S/W Version Start
+// 		if (bRetSync == FALSE)
+// 		{
+// 			dwPid = 0;
+// 			hWnd = ::FindWindow(NULL, _T("Dit Shared Memory Sync Client"));
+// 			GetWindowThreadProcessId(hWnd, &dwPid);
+// 			hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid);
+// 			ZeroMemory(currentPath, MAX_PATH);
+// 			GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH);
+// 
+// 			bReturn = finder.FindFile(currentPath);
+// 		}
+// 
+// 		while (bReturn)
+// 		{
+// 			bReturn = finder.FindNextFile();
+// 
+// 			if (finder.IsDots()) continue;
+// 			if (finder.IsDirectory()) continue;
+// 
+// 			finder.GetLastWriteTime(timeLastWrite);
+// 			strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay());
+// 			pThis->m_nFDCSyncSWVersion = atoi(strTemp);
+// 			g_pLog->DisplayMessage(_T("FDCSyncSWVersion = %d "), pThis->m_nFDCSyncSWVersion);
+// 			bRetSync = TRUE;
+// 		}
+// 		//Dit Shared Memory Sync Client S/W Version End
+// 	}
+//
+//	finder.Close();
 
-	while ((bRetFTPUploader&bRetGRM&bRetSync) != TRUE) 
+	auto GetModuleFileLastTime = [](LPCTSTR strWindowTitle)->long {
+		long nLastTime = 0;
+		DWORD dwPid = 0;
+
+		HWND hWnd = ::FindWindow(NULL, strWindowTitle);
+		if (hWnd == INVALID_HANDLE_VALUE)
+			return nLastTime;
+
+		GetWindowThreadProcessId(hWnd, &dwPid);
+		HANDLE hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid);
+		TCHAR currentPath[MAX_PATH];
+		ZeroMemory(currentPath, MAX_PATH);
+		GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH);
+
+		CFileFind finder;
+		if (finder.FindFile(currentPath))
+		{
+			finder.FindNextFile();
+
+			if (finder.IsDirectory() || finder.IsDots())
+				return nLastTime;
+
+			CTime timeLastWrite;
+			finder.GetLastWriteTime(timeLastWrite);
+			nLastTime = atoi(timeLastWrite.Format(_T("%Y%m%d")));
+		}
+		return nLastTime;
+	};
+
+	BOOL bRetFTPUploader = FALSE, bRetGRM = FALSE, bRetSync = FALSE;
+	while ((bRetFTPUploader&bRetGRM&bRetSync) != TRUE)
 	{
-		bReturn = FALSE;
-
-		//FTPUploader S/W Version Start
+		//FTPUploader S/W Version
 		if (bRetFTPUploader == FALSE)
 		{
-			dwPid = 0;
-			hWnd = ::FindWindow(NULL, _T("FTPUploader"));
-			GetWindowThreadProcessId(hWnd, &dwPid);
-			hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid);
-			ZeroMemory(currentPath, MAX_PATH);
-			GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH);
-
-			bReturn = finder.FindFile(currentPath);
+			if (pThis->m_nFDCFTPUploaderSWVersion = GetModuleFileLastTime(_T("FTPUploader")))
+			{
+				g_pLog->DisplayMessage(_T("FDCFTPUploaderSWVersion = %d "), pThis->m_nFDCFTPUploaderSWVersion);
+				bRetFTPUploader = TRUE;
+			}
 		}
-
-		while (bReturn)
-		{
-			bReturn = finder.FindNextFile();
-
-			if (finder.IsDots()) continue;
-			if (finder.IsDirectory()) continue;
-
-			finder.GetLastWriteTime(timeLastWrite);
-			strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay());
-			pThis->m_nFDCFTPUploaderSWVersion = atoi(strTemp);
-			g_pLog->DisplayMessage(_T("FDCFTPUploaderSWVersion = %d "), pThis->m_nFDCFTPUploaderSWVersion);
-			bRetFTPUploader = TRUE;
-		}
-		//FTPUploader S/W Version End
-
-		bReturn = FALSE;
-
-		//Dit Glass Raw Messenger S/W Version Start
+		Sleep(1);
+		//Dit Glass Raw Messenger S/W Version
 		if (bRetGRM == FALSE)
 		{
-			dwPid = 0;
-			hWnd = ::FindWindow(NULL, _T("Dit Glass Raw Messenger"));
-			GetWindowThreadProcessId(hWnd, &dwPid);
-			hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid);
-			ZeroMemory(currentPath, MAX_PATH);
-			GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH);
-
-			bReturn = finder.FindFile(currentPath);
+			if (pThis->m_nFDCGRMSWVersion = GetModuleFileLastTime(_T("Dit Glass Raw Messenger")))
+			{
+				g_pLog->DisplayMessage(_T("FDCGRMSWVersion = %d "), pThis->m_nFDCGRMSWVersion);
+				bRetGRM = TRUE;
+			}
 		}
-
-		while (bReturn)
-		{
-			bReturn = finder.FindNextFile();
-
-			if (finder.IsDots()) continue;
-			if (finder.IsDirectory()) continue;
-
-			finder.GetLastWriteTime(timeLastWrite);
-			strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay());
-			pThis->m_nFDCGRMSWVersion = atoi(strTemp);
-			g_pLog->DisplayMessage(_T("FDCGRMSWVersion = %d "), pThis->m_nFDCGRMSWVersion);
-			bRetGRM = TRUE;
-		}
-		//Dit Glass Raw Messenger S/W Version End
-
-		bReturn = FALSE;
-
+		Sleep(1);
 		//Dit Shared Memory Sync Client S/W Version Start
 		if (bRetSync == FALSE)
 		{
-			dwPid = 0;
-			hWnd = ::FindWindow(NULL, _T("Dit Shared Memory Sync Client"));
-			GetWindowThreadProcessId(hWnd, &dwPid);
-			hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid);
-			ZeroMemory(currentPath, MAX_PATH);
-			GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH);
-
-			bReturn = finder.FindFile(currentPath);
+			if (pThis->m_nFDCSyncSWVersion = GetModuleFileLastTime(_T("Dit Shared Memory Sync Client")))
+			{
+				g_pLog->DisplayMessage(_T("FDCSyncSWVersion = %d "), pThis->m_nFDCSyncSWVersion);
+				bRetSync = TRUE;
+			}
 		}
-
-		while (bReturn)
-		{
-			bReturn = finder.FindNextFile();
-
-			if (finder.IsDots()) continue;
-			if (finder.IsDirectory()) continue;
-
-			finder.GetLastWriteTime(timeLastWrite);
-			strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay());
-			pThis->m_nFDCSyncSWVersion = atoi(strTemp);
-			g_pLog->DisplayMessage(_T("FDCSyncSWVersion = %d "), pThis->m_nFDCSyncSWVersion);
-			bRetSync = TRUE;
-		}
-		//Dit Shared Memory Sync Client S/W Version End
+		Sleep(1);
 	}
-
-	finder.Close();
+	/*< SWK 20221222 - #4403 MOD End >*/
 }
 
 void CReviewInterface::SetReviewProgramVersion()
@@ -3694,6 +3760,23 @@
 	pReviewOffSetTool->GetOffSetInfo(nModule, nCam, nScan, dGlassXPos,dXpos, dYpos);
 	return TRUE;
 }
+/* < KEJ 20230621 - #4528 ADD Start > */
+BOOL CReviewInterface::IDMO2P_GetMotorPos(int nModule, double &dXpos, double &dYpos)
+{
+	dXpos = m_vecModuleStatus[nModule].GetMotorPosition()->dMotorPosX;
+	dYpos = m_vecModuleStatus[nModule].GetMotorPosition()->dMotorPosY;
+	return TRUE;
+
+}
+
+BOOL CReviewInterface::CalcMotorOffSetValue(int nModule, double &dXpos, double &dYpos)
+{
+	CDlgMotorOffSetTool* pMotorOffSetTool = m_pView->GetMotorOffSetToolHandle();
+
+	pMotorOffSetTool->CalOffsetInfo(nModule, dXpos, dYpos);
+	return TRUE;
+}
+/* < KEJ 20230621 - #4528 ADD End > */
 
 BOOL CReviewInterface::IDRO2P_SetGlassMode(BOOL bMode, int nCamidx, int nScanidx, double nXpos, double nYpos)
 {
@@ -6626,12 +6709,11 @@
 
 	if (IsManualProcessMode()==FALSE)	{	return;	}
 
-
 	CGlassResult *pGlassResult = m_pDoc->GlassResult_GetCurrentGlassResult();
-	if(pGlassResult == NULL) return;
+	if (pGlassResult == NULL) return;
 
 	const SDefectFilter *pDefectFilter = m_pDoc->Etc_GetDefectFilter();
-	if(pDefectFilter == NULL) return;
+	if (pDefectFilter == NULL) return;
 
 	int nMarginX = nDefectMarginX; //5000; // um
 	int nMarginY = nDefectMarginY; //5000; // um
@@ -6639,6 +6721,9 @@
 
 	MapDefectResult *pMapReviewResult = pGlassResult->GetMapDefectResult();
 
+	BOOL bFind = FALSE;
+
+	//Defect
 	if (pMapReviewResult)
 	{
 		CDefectResult* pDefectResult = NULL;
@@ -6646,28 +6731,28 @@
 		{
 			pDefectResult = static_cast<CDefectResult*>(it->second);
 
-			if(pDefectResult == NULL) continue;
+			if (pDefectResult == NULL) continue;
 
-			if (CDefectMap::FilterDefect(pDefectFilter, pDefectResult)==-1) continue;
+			//if (CDefectMap::FilterDefect(pDefectFilter, pDefectResult) == -1) continue;
 
-			if (pDefectResult->nUMOriginX >= nDefectPosX - nMarginX && 
-				pDefectResult->nUMOriginX <= nDefectPosX + nMarginX && 
-				pDefectResult->nUMOriginY >= nDefectPosY - nMarginY && 
+			if (pDefectResult->nUMOriginX >= nDefectPosX - nMarginX &&
+				pDefectResult->nUMOriginX <= nDefectPosX + nMarginX &&
+				pDefectResult->nUMOriginY >= nDefectPosY - nMarginY &&
 				pDefectResult->nUMOriginY <= nDefectPosY + nMarginY)
 			{
+				bFind = TRUE;
+
 				m_pView->UpdateSelectDefectList(pDefectResult->nDefectIdx);
 				m_pView->UpdateSelectDefectMap(pDefectResult);
-
-				m_pView->UpdateSelectDefectInfoMap(pDefectResult); //taek 201214 �꽑�깮�븳 �뵒�럺�쓽 �젙蹂대�� �꽆湲대떎
-				m_pView->UpdateSelectDefectInfo(pDefectResult->nDefectIdx); //taek 201214 �꽑�깮�븳 �뵒�럺�쓽 �궗吏� �젙蹂대�� �꽆湲대떎.
 
 				nSelectedModuleIndex = Module_GetSelectedModuleIndex();
 
 				// �씠�룞�븷 紐⑤뱢 �씤�뜳�뒪 �븣�븘�궡湲� (紐⑤뱢蹂� limit �뜲�씠�꽣 �궗�슜)
-				int nGoModuleIndex = Module_GetMoveIndex(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
+				//int nGoModuleIndex = Module_GetMoveIndex(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
+				int nGoModuleIndex = nSelectedModuleIndex;
 
 				// �꽑�깮 紐⑤뱢�쓣 �젣�쇅�븳 �굹癒몄� �솃�룞�옉 �옉�룞
-				if(nGoModuleIndex >= 0)
+				if (nGoModuleIndex >= 0)
 				{
 					Motor_HomeGoExceptOne(nGoModuleIndex, pDefectFilter->bAutoSelectCamera, TRUE);
 				}
@@ -6677,21 +6762,145 @@
 					break;
 				}
 
-				if(IsManualProcessMode() != FALSE){
+				if (IsManualProcessMode() != FALSE) {
 
-				Motor_CameraGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera,pDefectResult );
+					Motor_CameraGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera, pDefectResult);
+					return;
 				}
-			//	Motor_CameraCenterGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
+				//	Motor_CameraCenterGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
 
-				// [2017:1:19]-[WEZASW] : WSI Manual Measurement 湲곕뒫 異붽�
+					// [2017:1:19]-[WEZASW] : WSI Manual Measurement 湲곕뒫 異붽�
 				if (pDefectFilter->bUseWSI == TRUE && pDefectFilter->bUseWSIMeasurement == TRUE)
 				{
-					WSI_SetManualMeasurement(nGoModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectResult->dUMCenterOriginX, pDefectResult->dUMCenterOriginY, TRUE);
+					WSI_SetManualMeasurement(nGoModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, (int)pDefectResult->dUMCenterOriginX, (int)pDefectResult->dUMCenterOriginY, TRUE);
 				}
 				break;
 			}
 		}
 	}
+
+	//User
+	if (bFind == FALSE)
+	{
+		CDefectResult* pDefectResult = NULL;
+
+		VectorReviewResult *pVecReviewResult = pGlassResult->GetVectorUserResult();
+		if (pVecReviewResult == NULL) return;
+
+		for (VectorReviewResultIt it = pVecReviewResult->begin(); it != pVecReviewResult->end(); it++)
+		{
+			CReviewResult *pReviewResult = static_cast<CReviewResult*>(&(*it));
+
+			for (VectorSReviewResultIt its = pReviewResult->m_vecSReviewResult.begin(); its != pReviewResult->m_vecSReviewResult.end(); its++)
+			{
+
+				if (its->nUMOriginX >= nDefectPosX - nMarginX &&
+					its->nUMOriginX <= nDefectPosX + nMarginX &&
+					its->nUMOriginY >= nDefectPosY - nMarginY &&
+					its->nUMOriginY <= nDefectPosY + nMarginY)
+				{
+					bFind = TRUE;
+
+					pDefectResult = &(*its);
+
+					m_pView->UpdateSelectDefectMap(pDefectResult);
+
+					nSelectedModuleIndex = Module_GetSelectedModuleIndex();
+
+					// �씠�룞�븷 紐⑤뱢 �씤�뜳�뒪 �븣�븘�궡湲� (紐⑤뱢蹂� limit �뜲�씠�꽣 �궗�슜)
+					//int nGoModuleIndex = Module_GetMoveIndex(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
+					int nGoModuleIndex = nSelectedModuleIndex;
+
+					// �꽑�깮 紐⑤뱢�쓣 �젣�쇅�븳 �굹癒몄� �솃�룞�옉 �옉�룞
+					if (nGoModuleIndex >= 0)
+					{
+						Motor_HomeGoExceptOne(nGoModuleIndex, pDefectFilter->bAutoSelectCamera, TRUE);
+					}
+					else
+					{
+						g_pLog->DisplayMessage(_T("[Error] Can't Move Motor to Home"));
+						break;
+					}
+
+					if (IsManualProcessMode() != FALSE) {
+
+						Motor_CameraGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera, NULL, 0, 0);
+						return;
+					}
+					//	Motor_CameraCenterGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
+
+						// [2017:1:19]-[WEZASW] : WSI Manual Measurement 湲곕뒫 異붽�
+					if (pDefectFilter->bUseWSI == TRUE && pDefectFilter->bUseWSIMeasurement == TRUE)
+					{
+						WSI_SetManualMeasurement(nGoModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectResult->dUMCenterOriginX, pDefectResult->dUMCenterOriginY, TRUE);
+					}
+					break;
+				}
+			}
+		}
+	}
+
+	//UserWSI
+	if (bFind == FALSE)
+	{
+		CDefectResult* pDefectResult = NULL;
+
+		VectorReviewResult *pVecReviewResult = pGlassResult->GetVectorUserWsiResult();
+		if (pVecReviewResult == NULL) return;
+
+		for (VectorReviewResultIt it = pVecReviewResult->begin(); it != pVecReviewResult->end(); it++)
+		{
+			CReviewResult *pReviewResult = static_cast<CReviewResult*>(&(*it));
+
+			for (VectorSReviewResultIt its = pReviewResult->m_vecSReviewResult.begin(); its != pReviewResult->m_vecSReviewResult.end(); its++)
+			{
+
+				if (its->nUMOriginX >= nDefectPosX - nMarginX &&
+					its->nUMOriginX <= nDefectPosX + nMarginX &&
+					its->nUMOriginY >= nDefectPosY - nMarginY &&
+					its->nUMOriginY <= nDefectPosY + nMarginY)
+				{
+					bFind = TRUE;
+
+					pDefectResult = &(*its);
+
+					m_pView->UpdateSelectDefectMap(pDefectResult);
+
+					nSelectedModuleIndex = Module_GetSelectedModuleIndex();
+
+					// �씠�룞�븷 紐⑤뱢 �씤�뜳�뒪 �븣�븘�궡湲� (紐⑤뱢蹂� limit �뜲�씠�꽣 �궗�슜)
+					//int nGoModuleIndex = Module_GetMoveIndex(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
+					int nGoModuleIndex = nSelectedModuleIndex;
+
+					// �꽑�깮 紐⑤뱢�쓣 �젣�쇅�븳 �굹癒몄� �솃�룞�옉 �옉�룞
+					if (nGoModuleIndex >= 0)
+					{
+						Motor_HomeGoExceptOne(nGoModuleIndex, pDefectFilter->bAutoSelectCamera, TRUE);
+					}
+					else
+					{
+						g_pLog->DisplayMessage(_T("[Error] Can't Move Motor to Home"));
+						break;
+					}
+
+					if (IsManualProcessMode() != FALSE) {
+
+						Motor_CameraGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera, NULL, 0, 0);
+						return;
+					}
+					//	Motor_CameraCenterGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
+
+						// [2017:1:19]-[WEZASW] : WSI Manual Measurement 湲곕뒫 異붽�
+					if (pDefectFilter->bUseWSI == TRUE && pDefectFilter->bUseWSIMeasurement == TRUE)
+					{
+						WSI_SetManualMeasurement(nGoModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectResult->dUMCenterOriginX, pDefectResult->dUMCenterOriginY, TRUE);
+					}
+					break;
+				}
+			}
+		}
+	}
+
 }
 
 
@@ -7297,12 +7506,12 @@
 
 	
 
-	if (dDefectPosX > dXposPlusLimitPos|| dDefectPosX<dXposMinusLimitPos|| dDefectPosY > dYposPlusLimitPos|| dDefectPosY < dYposMinusLimitPos)
-	{
-		IDNO == AfxMessageBox(_T("Limit�쓣 珥덇낵 �븯�뿬 媛덉닔 �뾾�뒿�땲�떎."), MB_YESNO | MB_ICONQUESTION);
-		g_pLog->DisplayMessage(_T("Limit 珥덇낵"));
-		return FALSE;
-	}
+// 	if (dDefectPosX > dXposPlusLimitPos|| dDefectPosX<dXposMinusLimitPos|| dDefectPosY > dYposPlusLimitPos|| dDefectPosY < dYposMinusLimitPos)
+// 	{
+// 		IDNO == AfxMessageBox(_T("Limit�쓣 珥덇낵 �븯�뿬 媛덉닔 �뾾�뒿�땲�떎."), MB_YESNO | MB_ICONQUESTION);
+// 		g_pLog->DisplayMessage(_T("Limit 珥덇낵"));
+// 		return FALSE;
+// 	}
 
 	double n1stGantryXpos, n1stGantryYpos, n2ndGantryXpos, n2ndGantryYpos;
 	double dDistance,dCameraDistance;
@@ -7589,44 +7798,48 @@
 
 		dPosX += MagOffsetX * 1000;//GlassOffsetX*1000+MagOffsetX*1000;
 		dPosY+= MagOffsetY * 1000;//GlassOffsetY*1000+MagOffsetY*1000;
-		double xpostemp = 0;
-		double ypostemp = 0;
 
-
-		GetOffSetValue(nModuleIndex, pDefectResult->nAOICameraIdx, pDefectResult->nAOIScanIdx, nDefectPosX/1000, xpostemp, ypostemp);
-		xpostemp = floor(xpostemp * 1000);
-		ypostemp = floor(ypostemp * 1000);
-		//210127
-		if (m_pDoc->System_GetMotorInfo()->GetOriginDirection() == 2)
+		if (pDefectResult != NULL)
 		{
-			if (nModuleIndex == 0)
+			double xpostemp = 0;
+			double ypostemp = 0;
+
+			GetOffSetValue(nModuleIndex, pDefectResult->nAOICameraIdx, pDefectResult->nAOIScanIdx, nDefectPosX / 1000, xpostemp, ypostemp);
+			xpostemp = floor(xpostemp * 1000);
+			ypostemp = floor(ypostemp * 1000);
+			//210127
+			if (m_pDoc->System_GetMotorInfo()->GetOriginDirection() == 2)
 			{
-				dPosX += xpostemp;
-				dPosY += ypostemp;
+				if (nModuleIndex == 0)
+				{
+					dPosX += xpostemp;
+					dPosY += ypostemp;
+				}
+				else
+				{
+					dPosX += xpostemp * -1;
+					dPosY += ypostemp;
+				}
 			}
 			else
 			{
-				dPosX += xpostemp * -1;
-				dPosY += ypostemp;
+				if (nModuleIndex == 0)
+				{
+					dPosX += xpostemp;
+					dPosY += ypostemp * -1;
+				}
+				else
+				{
+					dPosX += xpostemp * -1;
+					dPosY += ypostemp * -1;
+				}
 			}
-		}
-		else
-		{
-			if (nModuleIndex == 0)
-			{
-				dPosX += xpostemp;
-				dPosY += ypostemp * -1;
-			}
-			else
-			{
-				dPosX += xpostemp * -1;
-				dPosY += ypostemp * -1;
-			}
-		}
 
-		g_pLog->DisplayMessage(_T("[OFFSetOn]MotorOffset: %.3lf, %.3lf MagOffset: %.3lf, %.3lf Glass Pos : %.3lf, %.3lf"), xpostemp, ypostemp, MagOffsetX,MagOffsetY,dPosX/1000.0,dPosY/1000.0);
-	 //dPosX= ApplyMagAndGlassOffset(nModuleIndex,0,dPosX, dPosY);
-	 //dPosY= ApplyMagAndGlassOffset(nModuleIndex,1,dPosX, dPosY);
+			g_pLog->DisplayMessage(_T("[OFFSetOn]MotorOffset: %.3lf, %.3lf MagOffset: %.3lf, %.3lf Glass Pos : %.3lf, %.3lf"), xpostemp, ypostemp, MagOffsetX, MagOffsetY, dPosX / 1000.0, dPosY / 1000.0);
+			//dPosX= ApplyMagAndGlassOffset(nModuleIndex,0,dPosX, dPosY);
+			//dPosY= ApplyMagAndGlassOffset(nModuleIndex,1,dPosX, dPosY);
+		}
+		
 	}
 
 	return Motor_CameraGo(nModuleIndex, dPosX/1000.0, dPosY/1000.0, bAutoSelectCamera, bGoEnd);
@@ -8864,7 +9077,12 @@
 {
 	m_pView->ShowHWSettingMode();
 }
-
+/* < KEJ 20230621 - #4528 ADD Start > */
+void CReviewInterface::IDL2P_OpenMotorOffSetTool()
+{
+	m_pView->ShowMotorOffSetTool();
+}
+/* < KEJ 20230621 - #4528 ADD  End > */
 BOOL CReviewInterface::IDL2P_IsManualProcessMode()
 {
 	return IsManualProcessMode();
@@ -9239,6 +9457,13 @@
 		g_pLog->DisplayMessage(_T("[WSI_%d] Send Motion End to WSI SUCCESS! [%02d][%02d]"), nWsiIndex, nModuleIndex, nWsiIndex);
 }
 
+void CReviewInterface::IMC2P_SendMotorAliveErrorAlram()
+{
+	IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(PCControlSendSignalIndex_State, PCControlSend_Review_Motor_Communication_Fail, 1000);
+
+	return;
+}
+
 void CReviewInterface::IWC2P_SetScanEnd( int nIndex, int nPointIndex, int nPositionX, int nPositionY )
 {
 	int nModuleIndex=-1, nWsiIndex=-1;

--
Gitblit v1.9.3