From aef69faaca3401fa1224884e686bce36b0c88acb Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 화, 26 10월 2021 16:57:35 +0900
Subject: [PATCH] Ongoing80 #3684 CF AOI Review 전설비 Review History Defect이미지 클릭시 Offset 자동 계산 기능 추가

---
 ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp |  349 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 347 insertions(+), 2 deletions(-)

diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
index d58cbe4..0f820c7 100644
--- a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
+++ b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
@@ -12,6 +12,7 @@
 #include "akGridCtrl/GridCellCheck.h"
 #include "akImageView.h"
 #include <algorithm>
+#include "MacroFile.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -137,6 +138,8 @@
 	ON_BN_CLICKED(IDC_CHK_SINGLE, &CReveiwHistoryDlg::OnClickedChkSingle)
 	ON_EN_CHANGE(IDC_EDIT_FILE_COUNT, &CReveiwHistoryDlg::OnChangeEditFileCount)
 	ON_WM_KEYDOWN()
+	ON_BN_CLICKED(IDC_BUTTON_OFFSET_APPLY, &CReveiwHistoryDlg::OnBnClickedButtonOffsetApply)
+	ON_BN_CLICKED(IDC_BUTTON_OFFSET_SAVE, &CReveiwHistoryDlg::OnBnClickedButtonOffsetSave)
 END_MESSAGE_MAP()
 
 // CReveiwHistoryDlg 硫붿떆吏� 泥섎━湲�
@@ -209,6 +212,13 @@
 	InitGridReviewLIst(&m_gridReviewList, IDC_STATIC_GRID_GLASS);
 	InitGridDefectLIst(&m_gridDefectInfo, IDC_STATIC_GRID_DEFECT);
 	InitGridGlassLIst(&m_gridGlassInfo, IDC_STATIC_GRID_GLASS_INFO);
+
+	/*< LYW 20211025 - #3684 ADD Start >*/
+	CString strPath = _T("");
+	InitDataInfo();
+	strPath.Format(_T("%s%s"), REVIEW_OFFSET_CONFIGFILE_PATH, REVIEW_OFFSET_CONFIGFILE_NAME);
+	LoadOffset(strPath);
+	/*< LYW 20211025 - #3684 ADD End >*/
 
 	OnViewReviewdefect();
 
@@ -894,6 +904,7 @@
 					_akDefect* pDefectInfo = &m_Formation.m_vecDefects[pDispInfo->item.row - 1];
 
 					m_FormationMap.setSelectDefect(pDefectInfo->m_nDefectID);
+					
 					//ImageShow(pDefectInfo->m_nDefectID);
 					if (!m_bDefectAll)
 					{
@@ -1262,13 +1273,14 @@
 	{
 		m_nEditCamIdx = pDefect->m_nCameraID;
 		m_nEditScanIdx = pDefect->m_nScanIdx;
-		if (pDefect->m_nModelIdx == 0)
+		m_nCurModelIdx = pDefect->m_nModelIdx;
+		if (m_nCurModelIdx == 0)
 		{
 			m_strGantryIdx = _T("Left");
 			m_dEditOffsetX = (double)(dOffsetDrectionX * (Point.x / 5)) / 1000;
 			m_dEditOffsetY = (double)-(dOffsetDrectionY * (Point.y / 5)) / 1000;
 		}
-		else if (pDefect->m_nModelIdx == 1)
+		else if (m_nCurModelIdx == 1)
 		{
 			m_strGantryIdx = _T("Right");
 			m_dEditOffsetX = (double)-(dOffsetDrectionX * (Point.x / 5)) / 1000;
@@ -3914,3 +3926,336 @@
 
 	CDialogEx::OnKeyDown(nChar, nRepCnt, nFlags);
 }
+
+/*< LYW 20211025 - #3684 ADD Start >*/
+void CReveiwHistoryDlg::OnBnClickedButtonOffsetApply()
+{
+	// TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎.
+	ApplyOffset(m_nCurModelIdx, m_nEditCamIdx, m_nEditScanIdx, m_dEditOffsetX, m_dEditOffsetY);
+}
+
+
+void CReveiwHistoryDlg::OnBnClickedButtonOffsetSave()
+{
+	// TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎.
+	SaveOffset();
+}
+
+BOOL CReveiwHistoryDlg::LoadOffset(CString strFilePath)
+{
+	//dBarValue = 0;
+	CMacroFile macroFile;
+
+	if (!macroFile.Read(strFilePath))
+		return FALSE;
+
+	macroFile.GetItem(_T("CAMERA_COUNT"), m_nCameraCount, 0);
+	macroFile.GetItem(_T("SCAN_COUNT"), m_nScanCount, 0);
+	macroFile.GetItem(_T("XPOS_COUNT"), m_XposCount, 0);
+	CString strItem = _T("");
+	double dXoffset = 0;
+	double dYoffset = 0;
+	double dXMin = 0;
+	double dXMAX = 0;
+
+	double dValue = 0;
+	dValue = 2 * CAM_MAX_COUNT*SCAN_MAX_COUNT;
+	dValue = 1600 / dValue;
+
+	for (int nModuleidx = 0; nModuleidx < 2; nModuleidx++)
+	{
+		for (int nCamidx = 0; nCamidx < CAM_MAX_COUNT; nCamidx++)
+		{
+			for (int nScanidx = 0; nScanidx < SCAN_MAX_COUNT; nScanidx++)
+			{
+
+				for (int nXposIndex = 0; nXposIndex < XPOS_MAX_COUNT; nXposIndex++)
+				{
+
+					strItem.Format(_T("MODULE[%d]_CAM[%d]_SCAN[%d]_IDX[%d]_OFFSET_X"), nModuleidx, nCamidx, nScanidx, nXposIndex);
+					macroFile.GetItem(strItem, dXoffset);
+
+
+					strItem.Format(_T("MODULE[%d]_CAM[%d]_SCAN[%d]_IDX[%d]_OFFSET_Y"), nModuleidx, nCamidx, nScanidx, nXposIndex);
+					macroFile.GetItem(strItem, dYoffset);
+
+					strItem.Format(_T("MODULE[%d]_CAM[%d]_SCAN[%d]_IDX[%d]_XPOS_X_MIN"), nModuleidx, nCamidx, nScanidx, nXposIndex);
+					macroFile.GetItem(strItem, dXMin);
+
+					strItem.Format(_T("MODULE[%d]_CAM[%d]_SCAN[%d]_IDX[%d]_XPOS_X_MAN"), nModuleidx, nCamidx, nScanidx, nXposIndex);
+					macroFile.GetItem(strItem, dXMAX);
+
+					SetInputOffSet(nModuleidx, nCamidx, nScanidx, nXposIndex, dXoffset, dYoffset, dXMin, dXMAX);
+
+				}
+				//IncressProcessBar(dValue);
+			}
+		}
+	}
+
+	return TRUE;
+
+}
+
+BOOL CReveiwHistoryDlg::SaveOffset()
+{
+	//dBarValue = 0;
+
+	CString strForderPath;
+	CString strFileName;
+	CTime time = CTime::GetCurrentTime();
+	strFileName.Format(_T("ReviewOffSet_%04d%02d%02d%02d%02d%02d.cfg"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
+	strForderPath.Format(_T("%s%s"), REVIEW_OFFSET_BACKUP_FORDER_PATH, strFileName);
+
+	CopyFile(REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME, strForderPath, FALSE);
+
+	BOOL bReturn = FALSE;
+	CString strTemp;
+	int nTemp;
+	double dTemp;
+
+	CMacroFile macroFile;
+	macroFile.Clear();
+
+	CString strItem = _T("");
+
+
+	strItem.Format(_T("CAMERA_COUNT"));
+	macroFile.SetItem(strItem, m_nCameraCount);
+
+	strItem.Format(_T("SCAN_COUNT"));
+	macroFile.SetItem(strItem, m_nScanCount);
+
+	strItem.Format(_T("XPOS_COUNT"));
+	macroFile.SetItem(strItem, m_XposCount);
+
+
+	CString strData;
+	double dData = 0;
+	for (int nModuleidx = 0; nModuleidx < 2; nModuleidx++)
+	{
+		for (int nCamidx = 0; nCamidx < CAM_MAX_COUNT; nCamidx++)
+		{
+			for (int nScanidx = 0; nScanidx < SCAN_MAX_COUNT; nScanidx++)
+			{
+
+				for (int nXposIndex = 0; nXposIndex < XPOS_MAX_COUNT; nXposIndex++)
+				{
+
+					OffSetInfo pOffSet = GetOffSetInfo(nModuleidx, nCamidx, nScanidx, nXposIndex);
+
+					strItem.Format(_T("MODULE[%d]_CAM[%d]_SCAN[%d]_IDX[%d]_OFFSET_X"), nModuleidx, nCamidx, nScanidx);
+					dData = pOffSet.dXoffSetValue;
+					macroFile.SetItem(strItem, dData);
+
+					strItem.Format(_T("MODULE[%d]_CAM[%d]_SCAN[%d]_IDX[%d]_OFFSET_Y"), nModuleidx, nCamidx, nScanidx);
+					dData = pOffSet.dYoffSetValue;
+					macroFile.SetItem(strItem, dData);
+
+					strItem.Format(_T("MODULE[%d]_CAM[%d]_SCAN[%d]_IDX[%d]_XPOS_X_MIN"), nModuleidx, nCamidx, nScanidx);
+					dData = pOffSet.dXposMin;
+					macroFile.SetItem(strItem, dData);
+
+					strItem.Format(_T("MODULE[%d]_CAM[%d]_SCAN[%d]_IDX[%d]_XPOS_X_MAN"), nModuleidx, nCamidx, nScanidx);
+					dData = pOffSet.dXposMax;
+					macroFile.SetItem(strItem, dData);
+				}
+				//IncressProcessBar(5);
+			}
+		}
+	}
+
+	CString strFilePath;
+	strFilePath.Format(_T("%s%s"), REVIEW_OFFSET_CONFIGFILE_PATH, REVIEW_OFFSET_CONFIGFILE_NAME);
+
+	bReturn = macroFile.Write(strFilePath);
+
+	if (bReturn) AfxMessageBox(_T("OFFSET SAVE SUCCESS"), MB_OK | MB_ICONASTERISK);
+	else AfxMessageBox(_T("OFFSET SAVE FAIL"), MB_OK | MB_ICONASTERISK);
+
+	return bReturn;
+}
+
+BOOL CReveiwHistoryDlg::ApplyOffset(int nModuleidx, int nCamIndex, int ScanIndex, double dXOffsetValue, double dYOffsetValue)
+{
+	if (nCamIndex > CAM_MAX_COUNT || nCamIndex < 0)
+	{
+		return FALSE;
+	}
+
+	if (ScanIndex > SCAN_MAX_COUNT || ScanIndex < 0)
+	{
+		return FALSE;
+	}
+
+
+	if (nModuleidx == 0)
+	{
+		VecOffSetScanData* pScandata = &m_vecOffSetCameraInfo[nCamIndex];
+		VecOffSetData* pData = &pScandata->at(ScanIndex);
+		OffSetInfo* pOffSetData = &pData->at(0);
+		if (pOffSetData->bCheckSave == TRUE)
+		{
+			AfxMessageBox(_T("�씠誘� ���옣�븳 OFFSET �엯�땲�떎. �떎�떆 �뀑�똿�쓣 �썝�븯�떆硫� �봽濡쒓렇�옩�쓣 �옱�떆�옉 �빐二쇱꽭�슂"), MB_OK | MB_ICONWARNING);
+			return FALSE;
+		}
+		else
+		{
+			pOffSetData->dXoffSetValue += dXOffsetValue;
+			pOffSetData->dYoffSetValue += dYOffsetValue;
+			pOffSetData->bCheckSave = TRUE;
+		}
+	}
+	else if (nModuleidx == 1)
+	{
+		VecOffSetScanData* pScandata = &m_vecOffSetCameraInfo2[nCamIndex];
+		VecOffSetData* pData = &pScandata->at(ScanIndex);
+		OffSetInfo* pOffSetData = &pData->at(0);
+		if (pOffSetData->bCheckSave == TRUE)
+		{
+			AfxMessageBox(_T("�씠誘� ���옣�븳 OFFSET �엯�땲�떎. �떎�떆 �뀑�똿�쓣 �썝�븯�떆硫� �봽濡쒓렇�옩�쓣 �옱�떆�옉 �빐二쇱꽭�슂"), MB_OK | MB_ICONWARNING);
+			return FALSE;
+		}
+		else
+		{
+			pOffSetData->dXoffSetValue += dXOffsetValue;
+			pOffSetData->dYoffSetValue += dYOffsetValue;
+			pOffSetData->bCheckSave = TRUE;
+		}
+	}
+	else
+	{
+		return FALSE;
+	}
+}
+
+BOOL CReveiwHistoryDlg::SetInputOffSet(int nModuleidx, int nCamIndex, int ScanIndex, int nXposIndex, double dXOffsetValue, double dYOffsetValue, double dXposMin, double dXposMax, BOOL bCheckSave/* = 0*/)
+{
+	if (nCamIndex > CAM_MAX_COUNT || nCamIndex < 0)
+	{
+		return FALSE;
+	}
+
+	if (ScanIndex > SCAN_MAX_COUNT || ScanIndex < 0)
+	{
+		return FALSE;
+	}
+
+
+	if (nModuleidx == 0)
+	{
+		VecOffSetScanData* pScandata = &m_vecOffSetCameraInfo[nCamIndex];
+		VecOffSetData* pData = &pScandata->at(ScanIndex);
+		OffSetInfo* pOffSetData = &pData->at(nXposIndex);
+		pOffSetData->dXoffSetValue = dXOffsetValue;
+		pOffSetData->dYoffSetValue = dYOffsetValue;
+		pOffSetData->dXposMin = dXposMin;
+		pOffSetData->dXposMax = dXposMax;
+		pOffSetData->bCheckSave = bCheckSave;
+
+	}
+	else if (nModuleidx == 1)
+	{
+		VecOffSetScanData* pScandata = &m_vecOffSetCameraInfo2[nCamIndex];
+		VecOffSetData* pData = &pScandata->at(ScanIndex);
+		OffSetInfo* pOffSetData = &pData->at(nXposIndex);
+		pOffSetData->dXoffSetValue = dXOffsetValue;
+		pOffSetData->dYoffSetValue = dYOffsetValue;
+		pOffSetData->dXposMin = dXposMin;
+		pOffSetData->dXposMax = dXposMax;
+		pOffSetData->bCheckSave = bCheckSave;
+	}
+	else
+	{
+		return FALSE;
+	}
+}
+
+void CReveiwHistoryDlg::InitDataInfo()
+{
+	//誘몃━ 怨듦컙 �븷�떦
+	for (int nCamidx = 0; nCamidx < CAM_MAX_COUNT; nCamidx++)
+	{
+
+		VecOffSetScanData pVecScanData;
+		for (int nScanidx = 0; nScanidx < SCAN_MAX_COUNT; nScanidx++)
+		{
+			VecOffSetData     pVecData;
+			for (int nXposIndex = 0; nXposIndex < XPOS_MAX_COUNT; nXposIndex++)
+			{
+
+				OffSetInfo pInfo;
+				pInfo.nXposIndex = nXposIndex;
+				pInfo.nScanIndex = nScanidx;
+				pInfo.nCamIndex = nCamidx;
+				pVecData.push_back(pInfo);
+
+			}
+			pVecScanData.push_back(pVecData);
+
+		}
+
+		m_vecOffSetCameraInfo.push_back(pVecScanData);
+	}
+
+	for (int nCamidx = 0; nCamidx < CAM_MAX_COUNT; nCamidx++)
+	{
+
+		VecOffSetScanData pVecScanData;
+		for (int nScanidx = 0; nScanidx < SCAN_MAX_COUNT; nScanidx++)
+		{
+			VecOffSetData     pVecData;
+			for (int nXposIndex = 0; nXposIndex < XPOS_MAX_COUNT; nXposIndex++)
+			{
+
+				OffSetInfo pInfo;
+				pInfo.nXposIndex = nXposIndex;
+				pInfo.nScanIndex = nScanidx;
+				pInfo.nCamIndex = nCamidx;
+				pVecData.push_back(pInfo);
+
+			}
+			pVecScanData.push_back(pVecData);
+
+		}
+
+		m_vecOffSetCameraInfo2.push_back(pVecScanData);
+	}
+
+}
+
+OffSetInfo CReveiwHistoryDlg::GetOffSetInfo(int nModuleidx, int nCamIndex, int ScanIndex, int nXposIndex)
+{
+	OffSetInfo pOFF;
+	if (nCamIndex > CAM_MAX_COUNT || nCamIndex < 0)
+	{
+		return pOFF;
+	}
+
+	if (ScanIndex > SCAN_MAX_COUNT || ScanIndex < 0)
+	{
+		return pOFF;
+	}
+
+
+	if (nModuleidx == 0)
+	{
+		VecOffSetScanData* pScandata = &m_vecOffSetCameraInfo[nCamIndex];
+		VecOffSetData* pData = &pScandata->at(ScanIndex);
+		OffSetInfo* pOffSetData = &pData->at(nXposIndex);
+
+		return *pOffSetData;
+	}
+	else if (nModuleidx == 1)
+	{
+		VecOffSetScanData* pScandata = &m_vecOffSetCameraInfo2[nCamIndex];
+		VecOffSetData* pData = &pScandata->at(ScanIndex);
+		OffSetInfo* pOffSetData = &pData->at(nXposIndex);
+		return *pOffSetData;
+	}
+	else
+	{
+		return pOFF;
+	}
+}
+/*< LYW 20211025 - #3684 ADD End >*/

--
Gitblit v1.9.3