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