From ea996431950e6ecff451bd40d1228f51d077475c Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 목, 28 4월 2022 09:22:18 +0900
Subject: [PATCH] Ongoing100 #4086 CF AOI Review FDC SW Version 추가 요청

---
 ReviewSystem/ReviewSystem/ReviewInterface.cpp |  438 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 406 insertions(+), 32 deletions(-)

diff --git a/ReviewSystem/ReviewSystem/ReviewInterface.cpp b/ReviewSystem/ReviewSystem/ReviewInterface.cpp
index 7e3e007..73bc99f 100644
--- a/ReviewSystem/ReviewSystem/ReviewInterface.cpp
+++ b/ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -67,6 +67,8 @@
 #include "akAOISharedSystem.h"
 #include "DlgModuleInfo.h"
 
+#include <Psapi.h>
+
 using namespace CHReviewResult;
 using namespace CHImageControls;
 
@@ -111,6 +113,14 @@
 
 	// single variable
 	m_strProgramVersion			= _T("");		// program version
+	/*< LYW 20220415 - #4086 ADD Start >*/
+	m_nFDCGRMSWVersion = 20220101;
+	m_nFDCFTPUploaderSWVersion = 20220101;
+	m_nFDCSyncSWVersion = 20220101;
+	m_nFDCReviewSWVersion = 20220101;
+	m_nFDCWSISWVersion00 = 20220101;
+	m_nFDCWSISWVersion01 = 20220101;
+	/*< LYW 20220415 - #4086 ADD End >*/
 	m_ProcessTimer.End();						// process timer
 
 	// multi variable	
@@ -126,6 +136,14 @@
 
 	m_bFirstReviewLeft = 0;
 	m_bFirstReviewRight = 0;
+
+	/*< LYW 20211014 - #3671 ADD Start >*/
+	m_daccumulate = 0;
+	/*< LYW 20211014 - #3671 ADD End >*/
+	/*< LYW 20211109 - #3662 ADD Start >*/
+	m_nReview00ImageContrast = 5;
+	m_nReview01ImageContrast = 5;
+	/*< LYW 20211109 - #3662 ADD End >*/
 
 	// cs init
 	InitializeCriticalSection(&m_csReviewResult);
@@ -144,6 +162,8 @@
 {	
 	if (m_pDoc==NULL) return FALSE;
 
+	Start3rdPartyProgram();
+
 	CreateDirectory(_REVIEW_SERVER_BASE_PATH_, NULL);
 	CreateDirectory(_REVIEW_SERVER_LOG_PATH_, NULL);
 	CreateDirectory(_REVIEW_SERVER_CONFIG_PATH_, NULL);
@@ -151,10 +171,10 @@
 	//�떆�옉�븷�븣 �떎 吏��슦怨� �떎�떆 蹂듭궗媛� �븘�슂�븷吏�
 	//std::experimental::filesystem::remove_all(_REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT);
 	//std::experimental::filesystem::remove_all(_REVIEW_RECIPE_BACKUP_PATH_CPJT);
-	ISP2P_CopyFolder(_REVIEW_SERVER_CONFIG_PATH_, _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT);
-	ISP2P_CopyFolder(_REVIEW_RECIPE_PATH_, _REVIEW_RECIPE_BACKUP_PATH_CPJT);
+	//ISP2P_CopyFolder(_REVIEW_SERVER_CONFIG_PATH_, _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT);
+	//ISP2P_CopyFolder(_REVIEW_RECIPE_PATH_, _REVIEW_RECIPE_BACKUP_PATH_CPJT);
 	//LYW_#3344_CF AOI Review Config File 諛깆뾽 湲곕뒫 媛쒖꽑 ADD END
-	SetProgramVersion();
+	SetReviewProgramVersion();
 
 	// init review data
 	if (m_pDoc->InitReviewData()==FALSE) 
@@ -179,6 +199,10 @@
 	{
 		m_pView->CreateDialogs(pSystemInfo->m_nLineType, pSystemInfo->m_nMachineType, pSystemInfo->m_bUseVisionAlign);
 	}
+
+	/*< LYW 20220415 - #4086 ADD Start >*/
+	_beginthread(threadSet3rdPartyProgramVersion, NULL, this);
+	/*< LYW 20220415 - #4086 ADD End >*/
 
 	// system type log : SW Version 異붽�
 	g_pLog->DisplayMessage(_T("Starting ReviewSystem Program! (%s)"), m_strProgramVersion);
@@ -362,20 +386,24 @@
 {
 	TRACE(_T("[A2E]DeinitReviewInterface �떆�옉\n"));
 
-	if (m_pView)
-	{
-		m_pView->DeleteDialogs();
-	}
-
-	ClearAllObserverVector();
-	g_pLog->DisplayMessage(_T("Clear all Observer Vectors"));
-	::Sleep(400);
-
 	m_ProcessTimer.Start();
 	DisconnectReviewCamera();
 	DeinitReviewCamera();
 	m_ProcessTimer.End();
+
+	Terminate3rdPartyProgram();
+	
+	if (m_pView)
+	{
+		m_pView->DeleteDialogs();
+	}
 	g_pLog->DisplayMessage(_T("ReviewCamera Deinit Time : %f ms"), m_ProcessTimer.GetDurationMilliSecond());
+
+	g_pLog->DisplayMessage(_T("Program exit by User!"));
+
+	ClearAllObserverVector();
+	g_pLog->DisplayMessage(_T("Clear all Observer Vectors"));
+	::Sleep(400);
 
 	m_ProcessTimer.Start();
 	DeinitAlignCamera();
@@ -468,8 +496,6 @@
 	DeinitSharedImage();
 	g_pLog->DisplayMessage(_T("Deinit Shared Image"));
 
-
-
 	DeinitTotalPitchMeasure();
 	g_pLog->DisplayMessage(_T("Deinit TotalPitch Measure"));
 
@@ -555,32 +581,196 @@
 	AFM_SetAFMZoomLevel(0, 0);
 }
 
-
-void CReviewInterface::SetProgramVersion()
+/*< LYW 20220415 - #4086 ADD Start >*/
+void CReviewInterface::threadSet3rdPartyProgramVersion(void* pArg)
 {
-	BOOL bReturn;
+	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;
 
-	::GetModuleFileName( AfxGetInstanceHandle(), currentPath, MAX_PATH);
-
-	bReturn = finder.FindFile(currentPath);
-
-	while(bReturn)
+	while ((bRetFTPUploader&bRetGRM&bRetSync) != TRUE) 
 	{
-		bReturn = finder.FindNextFile();
+		bReturn = FALSE;
 
-		if(finder.IsDots()) continue;
-		if(finder.IsDirectory()) continue;
+		//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);
 
-		finder.GetLastWriteTime(timeLastWrite);
-		m_strProgramVersion.Format(_T("Build[ %04d.%02d.%02d %02d:%02d ]"), 
-			timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay(), timeLastWrite.GetHour(), timeLastWrite.GetMinute());
+			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();
 }
+
+void CReviewInterface::SetReviewProgramVersion()
+{
+	//LYW0412
+	BOOL bReturn;
+	CFileFind finder;
+	CTime timeLastWrite;
+	TCHAR currentPath[MAX_PATH];
+	CString strTemp;
+
+	//Review S/W Version Start
+	::GetModuleFileName(AfxGetInstanceHandle(), currentPath, MAX_PATH);
+
+	bReturn = finder.FindFile(currentPath);
+
+	while (bReturn)
+	{
+		bReturn = finder.FindNextFile();
+
+		if (finder.IsDots()) continue;
+		if (finder.IsDirectory()) continue;
+
+		finder.GetLastWriteTime(timeLastWrite);
+		m_strProgramVersion.Format(_T("Build[ %04d.%02d.%02d %02d:%02d ]"),
+			timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay(), timeLastWrite.GetHour(), timeLastWrite.GetMinute());
+		strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay());
+		m_nFDCReviewSWVersion = atoi(strTemp);
+		g_pLog->DisplayMessage(_T("FDCReviewSWVersion = %d "), m_nFDCReviewSWVersion);
+	}
+	//Review S/W Version End
+}
+
+/*< LYW 20220426 - #4086 ADD Start >*/
+void CReviewInterface::Start3rdPartyProgram()
+{
+// 	if(StartWindowIDProgram(_T("FTPUploader"), _T("D:\\DIT_3rdParty\\FTPUpload\\FTPUploader.exe")))
+// 		g_pLog->DisplayMessage(_T("FDCFTPUploader Start Success"));
+// 	else g_pLog->DisplayMessage(_T("FDCFTPUploader Start Fail"));
+
+	if (StartWindowIDProgram(_T("Dit Glass Raw Messenger"), _T("D:\\DIT_3rdParty\\GlassRawMessenger\\DitGlassRawMessenger_x64.exe")))
+		g_pLog->DisplayMessage(_T("DitGlassRawMessenger Start Success"));
+	else g_pLog->DisplayMessage(_T("DitGlassRawMessenger Start Fail"));
+}
+
+int CReviewInterface::StartWindowIDProgram(CString WindowID, CString ProgramPath)
+{
+	HWND hWnd = ::FindWindow(NULL, WindowID);
+	if (hWnd == NULL)
+	{
+		if(ShellExecute(hWnd, NULL, ProgramPath, NULL, NULL, SW_SHOWMINIMIZED))
+			return TRUE;
+		else return FALSE;
+	}
+	return TRUE;
+}
+
+void CReviewInterface::Terminate3rdPartyProgram()
+{
+	/*TerminateWindowIDProgram(_T("FTPUploader"));*/
+	TerminateWindowIDProgram(_T("Dit Glass Raw Messenger"));
+	TerminateWindowIDProgram(_T("gnuplot"));
+	KillProcess("wgnuplot.exe");
+}
+
+void CReviewInterface::TerminateWindowIDProgram(CString WindowID)
+{
+	HWND hWnd = ::FindWindow(NULL, WindowID);
+	if (hWnd != NULL)
+	{
+		DWORD ProcessId;
+		GetWindowThreadProcessId(hWnd, &ProcessId);
+		HANDLE hProcess = OpenProcess(MAXIMUM_ALLOWED, FALSE, ProcessId);
+		if (hProcess != NULL)
+		{
+			TerminateProcess(hProcess, 0);
+		}
+
+	}
+}
+/*< LYW 20220426 - #4086 ADD End >*/
+/*< LYW 20220415 - #4086 ADD End >*/
 
 void CReviewInterface::CreateSystemDirectory()
 {
@@ -1174,6 +1364,10 @@
 
 			BOOL bConnection = pCameraControlReview->GetConnected();
 			pConnectionStatus->m_vecReviewCameraStatus.push_back(bConnection);
+
+			/*< LYW 20211112 - #3708 ADD Start >*/
+			g_pLog->DisplayMessage(_T("[ReviewCamera] %d is connected"), nModuleIndex);
+			/*< LYW 20211112 - #3708 ADD End >*/
 
 			nModuleIndex++; // module status++
 		} // for HeaderIdx
@@ -2750,6 +2944,21 @@
 	return -1;
 }
 
+void CReviewInterface::IWC2P_SetWSIVersion(int nModuleIndex, int nVersion)
+{
+	switch (nModuleIndex)
+	{
+	case 0:
+		m_nFDCWSISWVersion00 = nVersion;
+		break;
+	case 1:
+		m_nFDCWSISWVersion01 = nVersion;
+		break;
+	default:
+		break;
+	}
+}
+
 void CReviewInterface::IWC2P_SetConnectedStatus(int nModuleIndex, int nConnectStatus)
 {
 	CString strMessage = _T("");
@@ -3115,6 +3324,16 @@
 	return AlignLight_GetLightLevel(nCameraIndex, nValue);
 }
 
+int CReviewInterface::IACC2P_GetAccumaulate()
+{
+	return m_daccumulate;
+}
+
+void CReviewInterface::IACC2P_SetAccumaulate(int dValue)
+{
+	m_daccumulate = dValue;
+}
+
 BOOL CReviewInterface::IRCC2P_GetCurrentFrame(int nModuleIndex, int nCameraIndex, int nFrameWidth, int nFrameHeight, int nFrameChannels, CCHImageData* pImageData)
 {
 	if (m_pVirtualGlassMap==NULL) return FALSE;
@@ -3408,6 +3627,26 @@
 	m_bFirstReviewRight = b_Check;
 }
 
+BOOL CReviewInterface::IRP2P_GetReview00ImageContrast()
+{
+	return m_nReview00ImageContrast;
+}
+
+BOOL CReviewInterface::IRP2P_GetReview01ImageContrast()
+{
+	return m_nReview01ImageContrast;
+}
+
+void CReviewInterface::IRP2P_SetReview00ImageContrast(int n_Value)
+{
+	m_nReview00ImageContrast = n_Value;
+}
+
+void CReviewInterface::IRP2P_SetReview01ImageContrast(int n_Value)
+{
+	m_nReview01ImageContrast = n_Value;
+}
+
 
 int CReviewInterface::PS2P_GetModuleStatusCount(int nModuleType)
 {
@@ -3463,6 +3702,14 @@
 	CDlgDefectMap* pDefectmap =  m_pView->GetDefectMapDlgHandle();
 	if (pDefectmap == NULL) { return FALSE; }
 	pDefectmap->GetDefectMap()->SetOffsetmodeparma(bMode, nCamidx, nScanidx, nXpos, nYpos);
+	return FALSE;
+}
+
+BOOL CReviewInterface::IDRO2P_SetOffsetPram(int nCamIdx, int nScanIdx, BOOL bUse)
+{
+	CDlgDefectMap* pDefectmap = m_pView->GetDefectMapDlgHandle();
+	if (pDefectmap == NULL) { return FALSE; }
+	pDefectmap->GetDefectMap()->SetOffsetparm(nCamIdx, nScanIdx, bUse);
 	return FALSE;
 }
 
@@ -5772,6 +6019,12 @@
 		pGlassResult->m_AlignRecipe.dMatchingRate		= pRsRcpAlignInfo->m_dMatchingRate;
 		pGlassResult->m_AlignRecipe.strFirstImageFile	= pRsRcpAlignInfo->m_strFirstImageFile;
 		pGlassResult->m_AlignRecipe.strSecondImageFile	= pRsRcpAlignInfo->m_strSecondImageFile;
+		/*< LYW 20211012 - #3671 ADD Start >*/
+		pGlassResult->m_AlignRecipe.strFirstAssistantImageFile = pRsRcpAlignInfo->m_strFirstAssistantImageFile;
+		pGlassResult->m_AlignRecipe.strSecondAssistantImageFile = pRsRcpAlignInfo->m_strSecondAssistantImageFile;
+		pGlassResult->m_AlignRecipe.strMatchingPixelStandard = pRsRcpAlignInfo->m_strMatchingPixelStandard;
+		pGlassResult->m_AlignRecipe.strMatchingAlarmCondition = pRsRcpAlignInfo->m_strMatchingAlarmCondition;
+		/*< LYW 20211012 - #3671 ADD End >*/
 		pGlassResult->m_AlignRecipe.strTotalPitchImageFile = pRsRcpAlignInfo->m_strTotalPitchImageFile;
 
 		// edge find param
@@ -6525,10 +6778,6 @@
 {
 	if (m_pSequenceProcessor==NULL) return;
 
-	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 ADD START
-	m_pSequenceProcessor->SetSimulationMode(TRUE);
-	//#3584 210817 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 ADD END
-
 	if (nCommand == -1)		// DBClick Date
 	{
 
@@ -6537,6 +6786,7 @@
 
 		
 		m_pDlgDiagnosis->ShowWindow(SW_SHOW);
+		return;
 		/*
 		if (m_pSignalControl)
 		{
@@ -6554,6 +6804,14 @@
 	{
 		g_pLog->DisplayMessage(_T("Machine Mode is not Manual or Review Mode!"));
 		return;
+	}
+
+	else
+	{
+		//#3584 210923 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 ADD START
+		m_pSequenceProcessor->SetSimulationMode(TRUE);
+		g_pLog->DisplayMessage(_T("Set User Command = %d"),nCommand);
+		//#3584 210923 LYW CF AOI Review �떆裕щ젅�씠�뀡 湲곕뒫 �젙�긽�솕 ADD END
 	}
 
 	m_pSequenceProcessor->RecvSignalToSignalControl(PCControlRecvSignalIndex_Seq, nCommand);
@@ -8213,6 +8471,62 @@
 	return m_pDoc->Etc_GetTransferData();
 }
 
+BOOL CReviewInterface::ISP2P_GetReview00ImageContrast()
+{
+	return m_nReview00ImageContrast;
+}
+
+BOOL CReviewInterface::ISP2P_GetReview01ImageContrast()
+{
+	return m_nReview01ImageContrast;
+}
+
+void CReviewInterface::ISP2P_SetReview00ImageContrast(int n_Value)
+{
+	m_nReview00ImageContrast = n_Value;
+}
+
+void CReviewInterface::ISP2P_SetReview01ImageContrast(int n_Value)
+{
+	m_nReview01ImageContrast = n_Value;
+}
+
+int CReviewInterface::ISP2P_GetReviewSWVersion()
+{
+	return m_nFDCReviewSWVersion;
+}
+
+int CReviewInterface::ISP2P_GetSyncSWVersion()
+{
+	return m_nFDCSyncSWVersion;
+}
+
+int CReviewInterface::ISP2P_GetGRMSWVersion()
+{
+	return m_nFDCGRMSWVersion;
+}
+
+int CReviewInterface::ISP2P_GetFTPUploaderSWVersion()
+{
+	return m_nFDCFTPUploaderSWVersion;
+}
+
+int CReviewInterface::ISP2P_GetWSISWVersion(int nModuleIndex)
+{
+	switch (nModuleIndex)
+	{
+	case 0:
+		return m_nFDCWSISWVersion00;
+		break;
+	case 1:
+		return m_nFDCWSISWVersion01;
+		break;
+	default:
+		return m_nFDCWSISWVersion00;
+		break;
+	}
+}
+
 SDefectFilter* CReviewInterface::ISP2P_GetDefectFilter()
 {
 	if (m_pDoc==NULL) return NULL;
@@ -8546,6 +8860,66 @@
 	m_pView->ShowHistoryTool();
 }
 
+void CReviewInterface::IDL2P_OpenHWSettingTool()
+{
+	m_pView->ShowHWSettingMode();
+}
+
+BOOL CReviewInterface::IDL2P_IsManualProcessMode()
+{
+	return IsManualProcessMode();
+}
+
+int CReviewInterface::IDHM2P_InitReviewCamera()
+{
+	return InitReviewCamera();
+}
+
+void CReviewInterface::IDHM2P_DeinitReviewCamera()
+{
+	DeinitReviewCamera();
+}
+
+int CReviewInterface::IDHM2P_ConnectReviewCamera()
+{
+	return ConnectReviewCamera();
+}
+
+void CReviewInterface::IDHM2P_DisconnectReviewCamera()
+{
+	DisconnectReviewCamera();
+}
+
+void CReviewInterface::IDHM2P_ClearCameraControlObserverVector()
+{
+	ClearCameraControlObserverVector();
+}
+
+int CReviewInterface::IDHM2P_InitAFMControl()
+{
+	return InitAFMControl();
+}
+
+void CReviewInterface::IDHM2P_DeinitAFMControl()
+{
+	DeinitAFMControl();
+}
+
+int CReviewInterface::IDHM2P_InitAlignCamera()
+{
+	return InitAlignCamera();
+}
+
+void CReviewInterface::IDHM2P_DeinitAlignCamera()
+{
+	DeinitAlignCamera();
+}
+
+BOOL CReviewInterface::IDHM2P_IsManualProcessMode()
+{
+	return IsManualProcessMode();
+}
+
 //181203
 BOOL CReviewInterface::IRP2P_SaveDefectMap(const CString& strPath)
 {

--
Gitblit v1.9.3