SDC C-Project CF Review 프로그램
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 >*/