SDC C-Project CF Review 프로그램
LYW
2021-07-23 55615eba335d4cbc1f83330dc5078fe073034b7d
ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp
@@ -97,7 +97,7 @@
   }
   // ���� ��������� ����
   // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙
   wsiResult.nWsi_ResultIndex = measureResut.nResultIndex;
   wsiResult.nResultCode = measureResut.nResultCode;
@@ -163,7 +163,7 @@
   memcpy(wsiResult.pWsi_ResultData, measureResut.pResultData, sizeof(wsiResult.pWsi_ResultData));
   // ��� ������ �߰�
   // 占쏙옙占?占쏙옙占쏙옙占쏙옙 占쌩곤옙
   SReviewResult *pProcessResult = NULL;
   if (pGlassResult->SetWsiResultData(nModuleIndex, nCurResultIdx, wsiResult, nGlassPosX, nGlassPosY, nMotorPosX, nMotorPosY, dTime))
   {
@@ -192,7 +192,7 @@
   
   LeaveCriticalSection(&m_csUserCriticalSection);
   // ��� ����.
   // 占쏙옙占?占쏙옙占쏙옙.
   m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult);
   return;
@@ -246,14 +246,14 @@
      g_pLog->DisplayMessage(_T("[ReviewProcessor]SetWsiResultData module[%d] point[%d] result[%d]"), nModuleIndex, measureResut.nResultIndex, nCurResultIdx);
   }
   // ���� ��������� ����
   // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙
   wsiUserResult.nWsi_ResultCode      = measureResut.nResultCode;
   wsiUserResult.nWsi_Type            = measureResut.nResultType;
   wsiUserResult.nWsi_SlopeWarn      = measureResut.nXSlopeWarn;
   memcpy(wsiUserResult.pWsi_ResultData, measureResut.pResultData, sizeof(wsiUserResult.pWsi_ResultData));
   // ��� ������ �߰�
   // 占쏙옙占?占쏙옙占쏙옙占쏙옙 占쌩곤옙
   SReviewResult *pProcessResult = NULL;
   if (pGlassResult->SetUserWsiResultData(nModuleIndex, nCurResultIdx, wsiUserResult, nGlassPosX, nGlassPosY, nMotorPosX, nMotorPosY, dTime))
   {
@@ -282,7 +282,7 @@
   LeaveCriticalSection(&m_csUserCriticalSection);
   // ��� ����.
   // 占쏙옙占?占쏙옙占쏙옙.
   m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult);
   return;
@@ -345,7 +345,7 @@
      g_pLog->DisplayMessage(_T("[ReviewProcessor]SetWsiMultiShotResultData module[%d] point[%d] result[%d]"), nModuleIndex, measureResut.nResultIndex, nCurResultIdx);
   }
   // ���� ��������� ����
   // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙
   wsiResult.nWsi_ResultCode = measureResut.nResultCode;
   wsiResult.nWsi_Type = measureResut.nResultType;
   wsiResult.nWsi_SlopeWarn = measureResut.nXSlopeWarn;
@@ -353,7 +353,7 @@
   memcpy(wsiResult.pWsi_ResultData, measureResut.pResultData, sizeof(wsiResult.pWsi_ResultData));
   // ��� ������ �߰�
   // 占쏙옙占?占쏙옙占쏙옙占쏙옙 占쌩곤옙
   SReviewResult *pProcessResult = NULL;
   if (pGlassResult->SetWsiResultData(nModuleIndex, nCurResultIdx, wsiResult, nGlassPosX, nGlassPosY, nMotorPosX, nMotorPosY, dTime))
   {
@@ -382,7 +382,7 @@
   LeaveCriticalSection(&m_csUserCriticalSection);
   // ��� ����.
   // 占쏙옙占?占쏙옙占쏙옙.
   m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult);
   return;
@@ -465,7 +465,7 @@
      g_pLog->DisplayMessage(_T("[ReviewProcessor]SetReviewResultData module[%d] point[%d] result[%d]"), nModuleIndex, nResultIndex, nCurResultIdx);
   }
   // ���� ����̹��� ����
   // 占쏙옙占쏙옙 占쏙옙占쏙옙譴占쏙옙占?占쏙옙占쏙옙
   SReviewResult *pProcessResult = NULL;
   switch(GetReviewProcessStatus())
   {
@@ -527,7 +527,7 @@
   }
      LeaveCriticalSection(&m_csUserCriticalSection);
      //���� ��� ����������Ʈ ������ ���ع����� �Ʒ� ������ ��Ÿ�� �ٽ� ������ǥ �Ƚ���
      //占쏙옙占쏙옙 占쏙옙占?占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙트 占쏙옙占쏙옙占쏙옙 占쏙옙占쌔뱄옙占쏙옙占쏙옙 占싣뤄옙 占쏙옙占쏙옙占쏙옙 占쏙옙타占쏙옙 占쌕쏙옙 占쏙옙占쏙옙占쏙옙표 占싫쏙옙占쏙옙
      // ��ȣó�� �ʿ��� �̰� ���� 
      if (nCurResultIdx + 1== pReviewResult->GetSReviewResultCount())
      {
@@ -542,7 +542,7 @@
         if (bLeftGantryReviewDone&&bRightGantryReviewDone)
         {
            ::Sleep(3000); // ����̴� �ʼ���. ������ ���� ����.
            ::Sleep(3000); // 占쏙옙占쏙옙甄占?占십쇽옙占쏙옙. 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙.
            g_pLog->DisplayMessage(_T("[ReviewProcessor]RemainReview Started module[%d]"), nModuleIndex);
            CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor();
            switch (GetReviewProcessStatus())
@@ -567,13 +567,13 @@
         }
         else if(m_pRP2P->IRP2P_Recipe_GetRsRcpReviewInfo()->GetRcpSchedulingInfo()->GetSingleGantryPath()>0)
         {
            //20210302 �̱� ��Ʈ�� ���� ���� ������ �ΰ��� ��Ʈ���� �Ϸ�� ���¿���
            //������ �ؾߵ����� Review ���� Count üũ �ϴ� ������� �Ѱ�Ʈ�� ���� 200������ ���ߴ� ���� �߻�
            //�׷��� �̱� ��Ʈ�� ���� ����ó�� �Ͽ� �����ϵ��� �ٲ�ߵ� CHM
            //20210302 占싱깍옙 占쏙옙트占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占싸곤옙占쏙옙 占쏙옙트占쏙옙占쏙옙 占싹뤄옙占?占쏙옙占승울옙占쏙옙
            //占쏙옙占쏙옙占쏙옙 占쌔야듸옙占쏙옙占쏙옙 Review 占쏙옙占쏙옙 Count 체크 占싹댐옙 占쏙옙占쏙옙占쏙옙占?占싼곤옙트占쏙옙 占쏙옙占쏙옙 200占쏙옙占쏙옙占쏙옙 占쏙옙占쌩댐옙 占쏙옙占쏙옙 占쌩삼옙
            //占쌓뤄옙占쏙옙 占싱깍옙 占쏙옙트占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙처占쏙옙 占싹울옙 占쏙옙占쏙옙占싹듸옙占쏙옙 占쌕뀐옙森占?CHM
            g_pLog->DisplayMessage(_T("[ReviewProcessor]Single GantryPath Use"), nModuleIndex);
            if (bLeftGantryReviewDone || bRightGantryReviewDone)
            {
               ::Sleep(3000); // ����̴� �ʼ���. ������ ���� ����.
               ::Sleep(3000); // 占쏙옙占쏙옙甄占?占십쇽옙占쏙옙. 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙.
               g_pLog->DisplayMessage(_T("[ReviewProcessor]RemainReview Started module[%d]"), nModuleIndex);
               CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor();
               switch (GetReviewProcessStatus())
@@ -601,7 +601,7 @@
      }
      
      // ������ ����Ʈ���� �԰�, ������ ����� ���� ������...
      // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 占쌉곤옙, 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占?占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙...
      if(nCurResultIdx==nEndResultIdx && nCurResultIdx+1 < pReviewResult->GetSReviewResultCount())
       {
@@ -625,7 +625,7 @@
      pReviewResult->SetEndSReviewResultIndex(nEndResultIdx);
      // ������ ����Ʈ ���� ��������.
      ::Sleep(3000); // ����̴� �ʼ���. ������ ���� ����.
      ::Sleep(3000); // 占쏙옙占쏙옙甄占?占십쇽옙占쏙옙. 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙.
         if (bLeftGantryReviewDone&&bRightGantryReviewDone)
         {
         
@@ -685,7 +685,7 @@
      }
   }
   // ��� ����.
   // 占쏙옙占?占쏙옙占쏙옙.
   m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult, m_nReviewPlanIndex);
   return;
@@ -1143,14 +1143,14 @@
   pReviewResult->strSnapTime.Format(_T("%04d%02d%02d%02d%02d%02d"), snapTime.GetYear(), snapTime.GetMonth(), snapTime.GetDay(), 
      snapTime.GetHour(), snapTime.GetMinute(), snapTime.GetSecond());   // snap_time
   // ���� ���ε� �̹��� ���� �̸� �����
   // 占쏙옙占쏙옙 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙 占싱몌옙 占쏙옙占쏙옙占?
   CString strImageFileName = _T("");
   if (MakeReviewImageFileName(pReviewResult)==FALSE)
   {
      
   }
   //������� ���� �޸� ���� �̹��� �̸� �� ��ǥ ä���ֱ�
   //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨몌옙 占쏙옙占쏙옙 占싱뱄옙占쏙옙 占싱몌옙 占쏙옙 占쏙옙표 채占쏙옙占쌍깍옙
   if(!UpdateMemoryReviewPlan(pReviewResult))
      m_pRP2P->IRP2P_DisplayMessage(_T("[ReviewPlan] Memory Update Fail!! DefectIdx : %d"), pReviewResult->nDefectidx2);
   
@@ -1178,28 +1178,30 @@
      //   UINT64 nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep);
         //if (nSize > 0)
         //   m_pRP2P->IRP2P_DisplayMessage(_T("Backup Review Image Save Success! Size: %d byte [%s]"), nSize, pReviewResult->strUploadImgFileName);
         // ���ε� �̹��� ��� ���� 20190917 chm
         // 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占?占쏙옙占쏙옙 20190917 chm
         strPath.Format(_T("%s\\%s"), m_strSaveImageUploadPath, pReviewResult->strUploadImgFileName);
         nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep);
         m_pRP2P->IRP2P_DisplayMessage(_T("Backup Review Image Save Success! Size: %d byte [%s]"), nSize, strPath);
         if (pGlassResult != NULL)
         {
         {
            pGlassResult->m_strUploadImgFileName = m_strSaveImageUploadPath;
            //taek 210203
            strRTMSPath.Format(_T("\\\\126.100.100.5\\Reviewimage\\%s\\%s\\%s"), pGlassResult->m_strRTMSStepID, pGlassResult->m_strGlassID, pReviewResult->strUploadImgFileName);
            int bRet = SaveReviewImage(&uploadImage, strRTMSPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep); //Taek Rtms 210126
            if (bRet == 0)
            {
               m_pRP2P->IRP2P_DisplayMessage(_T("RTMS Review Image Save Fail [%s] index[%d]"), strRTMSPath, pReviewResult->nDefectIdx);
               m_pRP2P->IRP2P_DisplayMessage(_T("RTMS Review Image Save Fail!!"));
            }
            else m_pRP2P->IRP2P_DisplayMessage(_T("RTMS Review Image Save Success! Size: %d byte [%s] index[%d]"), nSize, strRTMSPath, pReviewResult->nDefectIdx); //taek 210128 �ӵ� ������ �ӽ÷� �α� ������ ����
         }
            else m_pRP2P->IRP2P_DisplayMessage(_T("RTMS Review Image Save Success! Size: %d byte [%s] index[%d]"), nSize, strRTMSPath, pReviewResult->nDefectIdx); //taek 210128 �ӵ� ������ �ӽ÷� �α� ������ ����
         }
         if (nSize > 0)
         {
             int aoiindex = CDitGlassRawClient::GetInstance()->GetDefectData(pReviewResult->nDefectidx2)->m_nDefectIdx;
            m_pRP2P->IRP2P_DisplayMessage(_T("Upload Review Image Save Success! Size: %d byte [%s] index[%d] AOI NO[%d]"), nSize, strRTMSPath, pReviewResult->nDefectIdx, aoiindex); //taek 210128 �ӵ� ������ �ӽ÷� �α� ������ ����
            m_pRP2P->IRP2P_DisplayMessage(_T("Upload Review Image Save Success! Size: %d byte [%s] index[%d] AOI NO[%d]"), nSize, pReviewResult->strUploadImgFileName, pReviewResult->nDefectIdx, aoiindex); //taek 210128 속도 문제로 임시로 로그 남기지 않음
            //m_pRP2P->IRP2P_DisplayMessage(_T("Upload Review Image Save Success! Size: %d byte [%s]"), nSize, pReviewResult->strUploadImgFileName);
         }
         else
@@ -1235,7 +1237,7 @@
   const CRsRcpReviewInfo*  psRcpReviewInfo = m_pRP2P->IRP2P_Recipe_GetRsRcpReviewInfo();
   if(psRcpReviewInfo== NULL) m_pRP2P->IRP2P_DisplayMessage(_T("RcpReviewInfo is NULL"));
   
   if(psRcpReviewInfo->m_bDefocusUse) //190819chm ����Ŀ�� �˶� ���
   if(psRcpReviewInfo->m_bDefocusUse) //190819chm 占쏙옙占쏙옙커占쏙옙 占싯띰옙 占쏙옙占?
   {
     if(pReviewResult->nLocation == DefectLoc_ASG || pReviewResult->nLocation == DefectLoc_PAD || pReviewResult->nLocation == DefectLoc_C2C)
     {
@@ -1276,22 +1278,21 @@
           }
        }
        if (pReviewResult->nModuleIdx == 0)
        if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft())
        {
           m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue;
           /* double dAverageGray = 0.0;
            if (CCHImageProcess::ImageAverage(pImageData, dAverageGray) == 1)
            {
               m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dAverageGray;
            }*/
     }
        else
           m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE);
           m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue);
        }
        else if(pReviewResult->nModuleIdx == 1 && m_pRP2P->IRP2P_GetFirstReviewRight())
        {
           m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue;
           m_pRP2P->IRP2P_SetFirstReviewRight(FALSE);
           m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue);
        }
     }
   }
   //#3524_210723_LYW_CF AOI Review 디포커스 알람 추가 및 FDC 보고 방식 개선 MOD Start
   else
   {
      double dFocusValue = 0.;
@@ -1309,15 +1310,21 @@
         dFocusValue = CalcFocusValue(imageConvert.GetImageBuffer(), imageConvert.GetWidth(), imageConvert.GetHeight());
      }
      if (pReviewResult->nModuleIdx == 0)
      if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft())
      {
         m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue;
         m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE);
         m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue);
      }
      else
      else if (pReviewResult->nModuleIdx == 1 && m_pRP2P->IRP2P_GetFirstReviewRight())
      {
         m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue;
         m_pRP2P->IRP2P_SetFirstReviewRight(FALSE);
         m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue);
      }
   }
   //#3524_210723_LYW_CF AOI Review 디포커스 알람 추가 및 FDC 보고 방식 개선 MOD End
   
   
@@ -1342,7 +1349,7 @@
   pReviewResult->strSnapTime.Format(_T("%04d%02d%02d%02d%02d%02d"), snapTime.GetYear(), snapTime.GetMonth(), snapTime.GetDay(), 
      snapTime.GetHour(), snapTime.GetMinute(), snapTime.GetSecond());   // snap_time
   // ���� ���ε� �̹��� ���� �̸� �����
   // 占쏙옙占쏙옙 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙 占싱몌옙 占쏙옙占쏙옙占?
   CString strImageFileName = _T("");
   if (MakeUserImageFileName(pReviewResult)==FALSE)
   {
@@ -1377,7 +1384,7 @@
         //uploadImage.SaveImage(strPath, 40);  // ȭ�� 60% 150k
         if(GetReviewProcessStatus() == ReviewProcessStatus_UserStart)
         {
            // ���ε� �̹��� ��� ���� 20190917 chm
            // 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占?占쏙옙占쏙옙 20190917 chm
            //strPath.Format(_T("%s\\%s\\%s"), m_strSaveImageUploadPath, m_strGlassID, pReviewResult->strUploadImgFileName);
            strPath.Format(_T("%s\\%s"), m_strSaveImageUploadPath, pReviewResult->strUploadImgFileName);
            nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep);
@@ -1399,7 +1406,7 @@
   const CRsRcpReviewInfo*  psRcpReviewInfo = m_pRP2P->IRP2P_Recipe_GetRsRcpReviewInfo();
   if(psRcpReviewInfo== NULL) m_pRP2P->IRP2P_DisplayMessage(_T("RcpReviewInfo is NULL"));
   if(psRcpReviewInfo->m_bDefocusUse) //190819chm ����Ŀ�� �˶� ���
   if(psRcpReviewInfo->m_bDefocusUse) //190819chm 占쏙옙占쏙옙커占쏙옙 占싯띰옙 占쏙옙占?
   {
      if(pReviewResult->nLocation == DefectLoc_ASG || pReviewResult->nLocation == DefectLoc_PAD || pReviewResult->nLocation == DefectLoc_C2C)
      {
@@ -1422,9 +1429,23 @@
         if (imageConvert.GetImageExist())
         {
            dFocusValue = CalcFocusValue(imageConvert.GetImageBuffer(), imageConvert.GetWidth(), imageConvert.GetHeight());
            if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft())
            {
               m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue;
               m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE);
               m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue);
            }
            else if (pReviewResult->nModuleIdx == 1 && m_pRP2P->IRP2P_GetFirstReviewRight())
            {
               m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue;
               m_pRP2P->IRP2P_SetFirstReviewRight(FALSE);
               m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue);
            }
         }
      
         // count defocus
         CGlassResult* pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult();
         if (pGlassResult)
@@ -1444,6 +1465,39 @@
      }
   }
   //#3524_210723_LYW_CF AOI Review 디포커스 알람 추가 및 FDC 보고 방식 개선 ADD Start
   else
   {
      double dFocusValue = 0.;
      CCHImageData imageConvert;
      if (pImageData->GetChannels() != 1)
      {
         CCHImageProcess::ImageConvert(pImageData, &imageConvert, ConvertTypeRGB2Gray);
      }
      else
      {
         pImageData->CopyImageTo(&imageConvert);
      }
      if (imageConvert.GetImageExist())
      {
         dFocusValue = CalcFocusValue(imageConvert.GetImageBuffer(), imageConvert.GetWidth(), imageConvert.GetHeight());
      }
      if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft())
      {
         m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue;
         m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE);
         m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue);
      }
      else if (pReviewResult->nModuleIdx == 1 && m_pRP2P->IRP2P_GetFirstReviewRight())
      {
         m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue;
         m_pRP2P->IRP2P_SetFirstReviewRight(FALSE);
         m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue);
      }
   }
   //#3524_210723_LYW_CF AOI Review 디포커스 알람 추가 및 FDC 보고 방식 개선 ADD End
   return ReviewResult_Process_Complete;
}
@@ -1484,7 +1538,7 @@
   pReviewResult->strSnapTime.Format(_T("%04d%02d%02d%02d%02d%02d"), snapTime.GetYear(), snapTime.GetMonth(), snapTime.GetDay(), 
      snapTime.GetHour(), snapTime.GetMinute(), snapTime.GetSecond());   // snap_time
   // ���� ���ε� �̹��� ���� �̸� �����
   // 占쏙옙占쏙옙 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙 占싱몌옙 占쏙옙占쏙옙占?
   CString strImageFileName = _T("");
   if (MakeReflowImageFileName(pReviewResult)==FALSE)
   {
@@ -1501,7 +1555,7 @@
   reflowParam reParam; //Reflow ���� ���� 
   reflowResult reResult;//Reflow ��� ����
   reflowResult reResult;//Reflow 占쏙옙占?占쏙옙占쏙옙
   //////////////////////////////////////////////////////////////////////////////////////////////
   BOOL btFlag =0;
@@ -1656,7 +1710,7 @@
         //uploadImage.SaveImage(strPath, 40);  // ȭ�� 60% 150k
         if(GetReviewProcessStatus() == ReviewProcessStatus_ReflowStart)
         {
            // ���ε� �̹��� ��� ���� 20190917 chm
            // 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占?占쏙옙占쏙옙 20190917 chm
            //strPath.Format(_T("%s\\%s\\%s"), m_strSaveImageUploadPath, m_strGlassID, pReviewResult->strUploadImgFileName);
            strPath.Format(_T("%s\\%s"), m_strSaveImageUploadPath, pReviewResult->strUploadImgFileName);
            nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep);
@@ -1909,7 +1963,7 @@
   if(GetReviewProcessStatus() == ReviewProcessStatus_ReviewStart)
   {
      // [2017:6:5]-[WEZASW] : Review Image ���ϸ�� '*' ��� ����.(����ó��)
      // [2017:6:5]-[WEZASW] : Review Image 占쏙옙占싹몌옙占?'*' 占쏙옙占?占쏙옙占쏙옙.(占쏙옙占쏙옙처占쏙옙)
      if (pReviewResult->strDefectCode.Compare(_T("***")) == 0)
         strDefectCodeTemp = _T("DC");   
      else 
@@ -2000,7 +2054,7 @@
      snapTime.GetHour(), snapTime.GetMinute(), snapTime.GetSecond());   // snap_time
   // [2017:4:10]-[WEZASW] : ����� ��û�� ���� bmp ���� �߰� ����. (�ӽû��)
   // [2017:4:10]-[WEZASW] : 占쏙옙占쏙옙占?占쏙옙청占쏙옙 占쏙옙占쏙옙 bmp 占쏙옙占쏙옙 占쌩곤옙 占쏙옙占쏙옙. (占쌈시삼옙占?
   pReviewResult->strOrignalImgFileName = strFileName + _T(".bmp");
   strFileName += _T(".jpg");
@@ -2061,7 +2115,7 @@
   
   if(GetReviewProcessStatus() == ReviewProcessStatus_UserStart)
   {
      // [2017:6:5]-[WEZASW] : Review Image ���ϸ�� '*' ��� ����.(����ó��)
      // [2017:6:5]-[WEZASW] : Review Image 占쏙옙占싹몌옙占?'*' 占쏙옙占?占쏙옙占쏙옙.(占쏙옙占쏙옙처占쏙옙)
      if (pReviewResult->strDefectCode.Compare(_T("***")) == 0)
         strDefectCodeTemp = _T("DC");   
      else 
@@ -2155,7 +2209,7 @@
   //       strFileName += pReviewResult->strSnapTime;
   //    }
   // [2017:4:10]-[WEZASW] : ����� ��û�� ���� bmp ���� �߰� ����. (�ӽû��)
   // [2017:4:10]-[WEZASW] : 占쏙옙占쏙옙占?占쏙옙청占쏙옙 占쏙옙占쏙옙 bmp 占쏙옙占쏙옙 占쌩곤옙 占쏙옙占쏙옙. (占쌈시삼옙占?
   pReviewResult->strOrignalImgFileName = strFileName + _T(".bmp");
   strFileName += _T(".jpg");
@@ -2238,7 +2292,7 @@
   FindAoiDefectImagePath(strGlassID, nOpticType, nPosX, nPosY, strAoiDarkPath, strAoiBrightPath);
   // Dark, Bright ��� ã�� ���� �ּ�ó�� [2017.7.1 bhs]
   // Dark, Bright 占쏙옙占?찾占쏙옙 占쏙옙占쏙옙 占쌍쇽옙처占쏙옙 [2017.7.1 bhs]
   // Dark image
   //if(nOpticType & DEFECT_OPTIC_DARK)
   {
@@ -2283,7 +2337,7 @@
   CFileFind finder;
   CString strSearchPath = _T("");
   // Dark, Bright ��� ã�� ���� �ּ�ó�� [2017.7.1 bhs]
   // Dark, Bright 占쏙옙占?찾占쏙옙 占쏙옙占쏙옙 占쌍쇽옙처占쏙옙 [2017.7.1 bhs]
   //if (nOpticType & DEFECT_OPTIC_DARK)
   {
      // Dark field
@@ -2357,7 +2411,7 @@
         processTimer.End();
      }
      // 4-3. ������� ���
      // 4-3. 占쏙옙占쏙옙占쏙옙占?占쏙옙占?
      double dAverageGray = 0.0;
      if (CCHImageProcess::ImageAverage(&bandImage, dAverageGray)==1)
      {
@@ -2464,7 +2518,7 @@
   double dRulerGab = 20.0 / m_dReviewImageScale;
   double dScaleResolution = pReviewResult->dMeasureResolution / m_dReviewImageScale;
   //DrawRuler(&memDC, nTotalWidth, nTotalHeight2, dScaleResolution, dRulerGab); // resolution, ruler gab //taek 210127 ��� X
   //DrawRuler(&memDC, nTotalWidth, nTotalHeight2, dScaleResolution, dRulerGab); // resolution, ruler gab //taek 210127 占쏙옙占?X
   // draw text string
   DrawDefectInfo(&memDC, findResult, pReviewResult);
@@ -2580,7 +2634,7 @@
   int nTotalWidth      = int(m_nReviewResizeWidth * m_dReviewImageScale + 0.5);
   int nTotalHeight   = int(m_nReviewResizeHeight * m_dReviewImageScale + 0.5);
   // Dark, Bright �̹����� ������ �ٵ��� ����, Dark ��, Bright �Ʒ� - ����� ��û[2017.6.30 bhs]
   // Dark, Bright 占싱뱄옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쌕듸옙占쏙옙 占쏙옙占쏙옙, Dark 占쏙옙, Bright 占싣뤄옙 - 占쏙옙占쏙옙占?占쏙옙청[2017.6.30 bhs]
   //int nX = nTotalWidth - nWidth;
   //int nY = nTotalHeight - (nHeight * 2);
@@ -2592,7 +2646,7 @@
   //pAoiDark1->ShowImage(pDC->m_hDC,   nTotalWidth - nWidth,   nTotalHei4ght-nHeight,   pAoiDark1->GetWidth(), pAoiDark1->GetHeight(), 0, 0);
   //pAoiBright1->ShowImage(pDC->m_hDC,   nTotalWidth - nWidth,   nTotalHeight-nHeight,   pAoiBright1->GetWidth(), pAoiBright1->GetHeight(), 0, 0);
   // �˻� �̹��� �߾ӿ� ȭ��ǥ ǥ�� - ����� ��û [2017.6.30 bhs]
   // 占싯삼옙 占싱뱄옙占쏙옙 占쌩앙울옙 화占쏙옙표 표占쏙옙 - 占쏙옙占쏙옙占?占쏙옙청 [2017.6.30 bhs]
   CFont Font;
   VERIFY(Font.CreateFont(
      50,                        // nHeight
@@ -2827,7 +2881,7 @@
      }
      //taek 210127
      //������� ��ǥ�� y �� *-1�� ����
      //占쏙옙占쏙옙占쏙옙占?占쏙옙표占쏙옙 y 占쏙옙 *-1占쏙옙 占쏙옙占쏙옙
      //���� ID, �˻� ī�޶� ����, �˻� Camera ���� : (? ) ķ ?, Cell ID,   Review Cam ���� : Gantry ����,   ���� Size,   ���� Zone ����,   Stak Flag, CODE ����, ��ǥ ����
      
      // PPID
@@ -3043,7 +3097,7 @@
   if(GetReviewProcessStatus() == ReviewProcessStatus_ReflowStart)
   {
      // [2017:6:5]-[WEZASW] : Review Image ���ϸ�� '*' ��� ����.(����ó��)
      // [2017:6:5]-[WEZASW] : Review Image 占쏙옙占싹몌옙占?'*' 占쏙옙占?占쏙옙占쏙옙.(占쏙옙占쏙옙처占쏙옙)
      if (pReviewResult->strDefectCode.Compare(_T("***")) == 0)
         strDefectCodeTemp = _T("DC");   
      else 
@@ -3120,7 +3174,7 @@
   //       strFileName += pReviewResult->strSnapTime;
   //    }
   // [2017:4:10]-[WEZASW] : ����� ��û�� ���� bmp ���� �߰� ����. (�ӽû��)
   // [2017:4:10]-[WEZASW] : 占쏙옙占쏙옙占?占쏙옙청占쏙옙 占쏙옙占쏙옙 bmp 占쏙옙占쏙옙 占쌩곤옙 占쏙옙占쏙옙. (占쌈시삼옙占?
   pReviewResult->strOrignalImgFileName = strFileName + _T(".bmp");
   strFileName += _T(".jpg");
@@ -3174,7 +3228,7 @@
      g_pLog->DisplayMessage(_T("[ReviewProcessor]SetWsiResultData module[%d] point[%d] result[%d]"), nModuleIndex, measureResut.nResultIndex, nCurResultIdx);
   }
   // ���� ��������� ����
   // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙
   wsiResult.nWsi_ResultCode      = measureResut.nResultCode;
   wsiResult.dWsi_DamDistance      = measureResut.dDamDistance;
@@ -3184,7 +3238,7 @@
   }
   //memcpy(wsiResult.nWsi_pReflowResultData, measureResut.pReflowResultData, sizeof(wsiResult.nWsi_pReflowResultData));
   
   // ��� ������ �߰�
   // 占쏙옙占?占쏙옙占쏙옙占쏙옙 占쌩곤옙
   SReviewResult *pProcessResult = NULL;
   if (pGlassResult->SetWsiReflowResultData(nModuleIndex, nCurResultIdx, wsiResult, nGlassPosX, nGlassPosY, nMotorPosX, nMotorPosY, dTime))
   {
@@ -3212,7 +3266,7 @@
   LeaveCriticalSection(&m_csUserCriticalSection);
   // ��� ����.
   // 占쏙옙占?占쏙옙占쏙옙.
   m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult, 5);
   return;
@@ -3238,7 +3292,7 @@
         nResultPosY = double(GLASS_SIZE_HEIGHT)/2. - dPosY;
      }
      else if(nCornercut == RPCRightTop)//���
      else if(nCornercut == RPCRightTop)//占쏙옙占?
      {
         nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX;
         nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY;
@@ -3256,7 +3310,7 @@
      }
   }
   else if(nOriginDirection==RPORightTop){//���������
   else if(nOriginDirection==RPORightTop){//占쏙옙占쏙옙占쏙옙占쏙옙占?
      if(nCornercut == RPCLeftTop)//�»� 
      { 
@@ -3264,7 +3318,7 @@
         nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY;
      }
      else if(nCornercut == RPCRightTop)//���
      else if(nCornercut == RPCRightTop)//占쏙옙占?
      {
         nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX;
         nResultPosY = double(GLASS_SIZE_HEIGHT)/2. - dPosY;
@@ -3292,7 +3346,7 @@
         nResultPosX = double(GLASS_SIZE_WIDTH) / 2. + dPosX;
         nResultPosY = double(GLASS_SIZE_HEIGHT) / 2. + dPosY;
      }
      else if(nCornercut == RPCRightTop)//���
      else if(nCornercut == RPCRightTop)//占쏙옙占?
      {
         nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX;
         nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY;
@@ -3321,7 +3375,7 @@
         nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY;
      }
      else if(nCornercut == RPCRightTop)//���
      else if(nCornercut == RPCRightTop)//占쏙옙占?
      {
         nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX;
         nResultPosY = double(GLASS_SIZE_HEIGHT)/2. - dPosY;
@@ -3357,7 +3411,7 @@
   CString strFileName = _T("");
   CString strDefectCodeTemp = _T("");
   // [2017:6:5]-[WEZASW] : Review Image ���ϸ�� '*' ��� ����.(����ó��)
   // [2017:6:5]-[WEZASW] : Review Image 占쏙옙占싹몌옙占?'*' 占쏙옙占?占쏙옙占쏙옙.(占쏙옙占쏙옙처占쏙옙)
   if (pReviewResult->strDefectCode.Compare(_T("***")) == 0)
      strDefectCodeTemp = _T("DC");   
   else 
@@ -3421,7 +3475,7 @@
{
   if(pReviewResult == NULL)   return FALSE;
   //������� ���� �޸� ���� �̹��� �̸� �� ��ǥ ä���ֱ�
   //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨몌옙 占쏙옙占쏙옙 占싱뱄옙占쏙옙 占싱몌옙 占쏙옙 占쏙옙표 채占쏙옙占쌍깍옙
   CDitGlassRawClient *pDitGlassRawCleint = CDitGlassRawClient::GetInstance();
   if(pDitGlassRawCleint->isConnect() == TRUE)
   {
@@ -3442,10 +3496,10 @@
      strcpy(pSharedGlassData->m_strAlignFirst, m_strReviewFirst.MakeLower());
      strcpy(pSharedGlassData->m_strAlignSecond, m_strReviewSecned.MakeLower());
      pSharedDefectReview->m_nPlanType =  ditRaw::RPT_Review;   //0:None, 1:Location(User, Fiexed) Review, 4:reflower, ??:Wsi, 1000:AOI(�ܺ� ���� ���� ���)
      pSharedDefectReview->m_nPlanType =  ditRaw::RPT_Review;   //0:None, 1:Location(User, Fiexed) Review, 4:reflower, ??:Wsi, 1000:AOI(占쌤븝옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占?
      pSharedDefectReview->m_nResultCode = 1;  //0:None, 1:Success
      pSharedDefectReview->m_nShotIndex = pReviewResult->nResultIdx; 
      //pSharedDefectReview->m_nShotIndex = GetPlanReviewCount(); //RTMS ���ؿ� ���� ���� ������ ��� �ƴϸ� ������ �ϴ� �ɷ� taek 210128
      //pSharedDefectReview->m_nShotIndex = GetPlanReviewCount(); //RTMS 占쏙옙占쌔울옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占?占싣니몌옙 占쏙옙占쏙옙占쏙옙 占싹댐옙 占심뤄옙 taek 210128
      pSharedDefectReview->m_nModuleIndex = pReviewResult->nModuleIdx;
      pSharedDefectReview->m_nMagnificIndex = 20;
      pSharedDefectReview->m_fManification =pReviewResult->dMagnification;
@@ -3459,7 +3513,7 @@
BOOL CReviewProcessor_CPJT::UpdateMemoryUserPlan( SReviewResult* pReviewResult )
{
   //������� ���� �޸� ���� �̹��� �̸� �� ��ǥ ä���ֱ�
   //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨몌옙 占쏙옙占쏙옙 占싱뱄옙占쏙옙 占싱몌옙 占쏙옙 占쏙옙표 채占쏙옙占쌍깍옙
   CDitGlassRawClient *pDitRawClient = CDitGlassRawClient::GetInstance();
   if(pDitRawClient->isConnect() == TRUE)
   {
@@ -3476,7 +3530,7 @@
      
      strcpy(pSharedDefectReview->m_strRevImageName,pReviewResult->strImgFileName);
   
      pSharedDefectReview->m_nPlanType = ditRaw::RPT_User;   //0:None, 1:Location(User, Fiexed) Review, 4:reflower, ??:Wsi, 1000:AOI(�ܺ� ���� ���� ���)
      pSharedDefectReview->m_nPlanType = ditRaw::RPT_User;   //0:None, 1:Location(User, Fiexed) Review, 4:reflower, ??:Wsi, 1000:AOI(占쌤븝옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占?
      pSharedDefectReview->m_nResultCode = 1;  //0:None, 1:Success
      pSharedDefectReview->m_nShotIndex = pReviewResult->nResultIdx; 
      pSharedDefect->m_nShotIdx = pReviewResult->nResultIdx;
@@ -3495,7 +3549,7 @@
BOOL CReviewProcessor_CPJT::UpdateMemoryReflowPlan( SReviewResult* pReviewResult )
{
   if(pReviewResult == NULL)   return FALSE;
   //������� ���� �޸𸮿� ��� ä�� �ֱ�
   //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨모리울옙 占쏙옙占?채占쏙옙 占쌍깍옙
   CDitGlassRawClient *pDitRawClient = CDitGlassRawClient::GetInstance();
   //int nEqpID = m_pSP2P->ISP2P_System_GetSystemInfo()->m_nMachineType;
   CString strCellID = _T("");
@@ -3517,7 +3571,7 @@
            nReflowjuge=1;
         }
         // ����� ��û���� ������. 0,1 Position�� Pass
         // 占쏙옙占쏙옙占?占쏙옙청占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙. 0,1 Position占쏙옙 Pass
         else if(nReflowjuge == 3 || nReflowjuge == 2)
         {
            m_pRP2P->IRP2P_DisplayMessage(_T("[ReflowResult] Reflow Judge Is No OverFlow %d"),nReflowjuge);
@@ -3582,7 +3636,7 @@
{
   if(pReviewResult == NULL)   return FALSE;
   //������� ���� �޸𸮿� ��� ä�� �ֱ�
   //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨모리울옙 占쏙옙占?채占쏙옙 占쌍깍옙
   CDitGlassRawClient *pDitGlassRawClient = CDitGlassRawClient::GetInstance();
   if(pDitGlassRawClient->isConnect() == TRUE)
@@ -3624,7 +3678,7 @@
BOOL CReviewProcessor_CPJT::UpdateMemoryWsiReflowPlan( SReviewResult* pReviewResult )
{
   if(pReviewResult == NULL)   return FALSE;
   //������� ���� �޸𸮿� ��� ä�� �ֱ�
   //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨모리울옙 占쏙옙占?채占쏙옙 占쌍깍옙
   CDitGlassRawClient *pDitRawClient = CDitGlassRawClient::GetInstance();
   
@@ -3638,12 +3692,12 @@
   /*
   pPacket->GetInt(0)         = Index
   pPacket->GetInt(1)         = Wsi ���� ���
   pPacket->GetInt(2)         = A�� ���� ��� (1 ���� 0 ����)
   pPacket->GetInt(3)          = B�� ���� ���
   pPacket->GetInt(4)          = C�� ���� ���
   pPacket->GetInt(5)          = D�� ���� ���
   pPacket->GetInt(6)          = Review���� ������� PointIndex
   pPacket->GetInt(1)         = Wsi 占쏙옙占쏙옙 占쏙옙占?
   pPacket->GetInt(2)         = A占쏙옙 占쏙옙占쏙옙 占쏙옙占?(1 占쏙옙占쏙옙 0 占쏙옙占쏙옙)
   pPacket->GetInt(3)          = B占쏙옙 占쏙옙占쏙옙 占쏙옙占?
   pPacket->GetInt(4)          = C占쏙옙 占쏙옙占쏙옙 占쏙옙占?
   pPacket->GetInt(5)          = D占쏙옙 占쏙옙占쏙옙 占쏙옙占?
   pPacket->GetInt(6)          = Review占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占?PointIndex
   pPacket->GetDouble(0)       = �£�� Monomo������ �Ÿ�
   */
   
@@ -3655,7 +3709,7 @@
   
   nWsiReflowJudge  = pReviewResult->nWsi_ResultCode;
   //nWsiReflowResult += pReviewResult->nWsi_pReflowResultData[0] //A 1�� �Ű�Ⱦ�
   //nWsiReflowResult += pReviewResult->nWsi_pReflowResultData[0] //A 1占쏙옙 占신곤옙횡占?
   nWsiReflowResult += pReviewResult->nWsi_pReflowResultData[1];//B
   nWsiReflowResult += pReviewResult->nWsi_pReflowResultData[2];//C
   //nWsiReflowResult += pReviewResult->nWsi_pReflowResultData[3];//D
@@ -3715,7 +3769,7 @@
{
   if(pReviewResult == NULL)   return FALSE;
   //������� ���� �޸𸮿� ��� ä�� �ֱ�
   //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨모리울옙 占쏙옙占?채占쏙옙 占쌍깍옙
   CDitGlassRawClient *pDitGlassRawClient = CDitGlassRawClient::GetInstance();
   if(pDitGlassRawClient->isConnect() == TRUE)
@@ -3750,7 +3804,7 @@
{
   if (pReviewResult == NULL)   return FALSE;
   //������� ���� �޸𸮿� ��� ä�� �ֱ�
   //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨모리울옙 占쏙옙占?채占쏙옙 占쌍깍옙
   CDitGlassRawClient *pDitGlassRawClient = CDitGlassRawClient::GetInstance();
   if (pDitGlassRawClient->isConnect() == TRUE)