| | |
| | | #include "akGridCtrl/GridCellCheck.h" |
| | | #include "akImageView.h" |
| | | #include <algorithm> |
| | | #include "MacroFile.h" |
| | | |
| | | #ifdef _DEBUG |
| | | #define new DEBUG_NEW |
| | |
| | | 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 메시지 처리기 |
| | |
| | | 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(); |
| | | |
| | |
| | | _akDefect* pDefectInfo = &m_Formation.m_vecDefects[pDispInfo->item.row - 1]; |
| | | |
| | | m_FormationMap.setSelectDefect(pDefectInfo->m_nDefectID); |
| | | |
| | | //ImageShow(pDefectInfo->m_nDefectID); |
| | | if (!m_bDefectAll) |
| | | { |
| | |
| | | { |
| | | 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; |
| | |
| | | |
| | | 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 >*/ |