SDC C-Project CF Review 프로그램
LYW
2021-07-19 2bd50ead7f0b92fb9ed5b477b63dea8fbcf8217e
Ongoing60 #3517 CF AOI Review 자가진단 기능 개선

1차 커밋 내용
1) 진직도 자가진단 UI 모듈별 분리
2) 시뮬레이션 정상화
3) WSI 데이터 추가
4) 초기 셋팅값 설정 및 기준점으로 적용
21개 파일 변경됨
1060 ■■■■ 파일 변경됨
Internal_Library/CHWsiControls/WsiControl_Dit.cpp 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
Internal_Library/Include/CHWsiControls/WsiControlInfo.h 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/M_AutoDiagnosisManager/DiagnosisInfo.cpp 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/M_AutoDiagnosisManager/DiagnosisManager.cpp 9 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp 207 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/M_AutoDiagnosisManager/M_AutoDiagnosisManager.vcxproj 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Flatness.cpp 27 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.cpp 53 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.h 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.cpp 207 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.h 17 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp 116 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.h 21 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.cpp 28 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.h 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewSystem.rc 256 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 12 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/resource.h 42 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisInfo.h 44 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisManager.h 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisProcessor.h 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
Internal_Library/CHWsiControls/WsiControl_Dit.cpp
@@ -455,6 +455,10 @@
            measureResult.nWsiState    = pPacket->GetInt(3);
            measureResult.dAccuracy = pPacket->GetDouble(0);
            measureResult.dRepeatability = pPacket->GetDouble(1);
            for (int i = 0; i < 10; i++)
            {
                measureResult.dDiagnosisHeight[i] = pPacket->GetDouble(i + 2);
            }
            m_pWC2P->IWC2P_DisplayMessage(m_nIndex,_T("VLSI state %d ACC %f RTB %f"),measureResult.nWsiState,measureResult.dAccuracy ,measureResult.dRepeatability);
        }
        break;
Internal_Library/Include/CHWsiControls/WsiControlInfo.h
@@ -75,6 +75,7 @@
    int            nWsiState;
    double        dAccuracy;
    double      dRepeatability;
    double        dDiagnosisHeight[10];
    bool        bBigSizeDefect;
    
ReviewSystem/M_AutoDiagnosisManager/DiagnosisInfo.cpp
@@ -19,6 +19,12 @@
    file.GetItem(_T("FLATNESS_JUDGE_DATA_Z_RANGE"), m_dJudgeData_ZRange, 0);
    file.GetItem(_T("FLATNESS_GLASS_X"), m_nGlassSizeX, 0);
    file.GetItem(_T("FLATNESS_GLASS_Y"), m_nGlassSizeY, 0);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    file.GetItem(_T("FLATNESS_SKIPMODE"), m_nFlatnessSkipMode, 0);
    file.GetItem(_T("SQUARENESS_STANDARD"), m_dSquarenessStandard, 0);
    file.GetItem(_T("SQUARENESS_STANDARD2"), m_dSquarenessStandard2, 0);
    file.GetItem(_T("WSI_STANDARD"), m_dWSIStandard, 0);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    file.GetItem(_T("FLATNESS_MODE"), m_nFlatnessMode, 0);
    file.GetItem(_T("FLATNESS_RANGECOUNT"), m_nRangeCount_Flatness, 0);
    file.GetItem(_T("WSI_PANEL_COUNT"), m_nPanelCount_Wsi, 0);
ReviewSystem/M_AutoDiagnosisManager/DiagnosisManager.cpp
@@ -1013,6 +1013,15 @@
    return CreateDirectory(strTemp, NULL);
}
BOOL CDiagnosisManager::CheckManualMode()
{
    if (m_pDP2P->IDP2P_CheckManualMode() == TRUE)
    {
        return TRUE;
    }
    return FALSE;
}
int CDiagnosisManager::SetDiagnosisResultCount_Squareness(int nCount)
{
    if (nCount == int(m_vecDiagnosisResult_Squareness.size())) return int(m_vecDiagnosisResult_Squareness.size());
ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp
@@ -50,6 +50,8 @@
{
    if (pParameter == NULL) return;
    CString strMessage = "";
    CDiagnosisProcessData* pProcessData = static_cast<CDiagnosisProcessData*>(pParameter);
    int nProcessMode = pProcessData->nProcessMode;
@@ -60,20 +62,69 @@
        m_pManager->m_bProcessAll = true;
        ProcessAll();
        break;
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    case DiagnosisMode_Review :
        strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisMode_Review START"));
        m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        m_pManager->m_bProcessAll = false;
        if (IsCommandStop()) return;
        m_pDP2P->IDP2P_SetDialogTap(0);
        ProcessSquareness();
        Sleep(1000);
        if (IsCommandStop()) return;
        m_pDP2P->IDP2P_SetDialogTap(1);
        ProcessFlatness();
        Sleep(1000);
        if (ProcessDiagnosisJudge() == FALSE) {
            strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
            m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        }
        strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisMode_Review END"));
        m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        break;
    case DiagnosisMode_Wsi:
        strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisMode_WSI START"));
        m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        m_pManager->m_bProcessAll = false;
        if (IsCommandStop()) return;
        m_pDP2P->IDP2P_UpdateDialog(7);
        ProcessWsi();
        Sleep(1000);
        if (ProcessDiagnosisJudge() == FALSE) {
            strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
            m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        }
        strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisMode_WSI END"));
        m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        break;
    case DiagnosisMode_Squareness:
        m_pManager->m_bProcessAll = false;
        ProcessSquareness();
        Sleep(1000);
        if (ProcessDiagnosisJudge() == FALSE) {
            strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
            m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        }
        break;
    case DiagnosisMode_Wsi:
        m_pManager->m_bProcessAll = false;
        ProcessWsi();
        break;
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    case DiagnosisMode_Flatness:
        m_pManager->m_bProcessAll = false;
        ProcessFlatness();
        Sleep(1000);
        if (ProcessDiagnosisJudge() == FALSE) {
            strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
            m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        }
        break;
    case DiagnosisMode_Flatness_Manual:
@@ -94,6 +145,8 @@
int CDiagnosisProcessor::ProcessAll()
{
    if (IsCommandStop()) return 1;
    CString strMessage = "";
    
    m_pDP2P->IDP2P_UpdateDialog(7);//WSI Result 칸 초기화 
    //if (m_pDP2P == NULL) return 0;
@@ -114,53 +167,16 @@
    m_pDP2P->IDP2P_SetDialogTap(1);
    ProcessFlatness();
    Sleep(2000);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    //Sleep(2000);
    Sleep(1000);
    //#3407 KYH 자가진단 Judge 판정 및 알람 발생 기능 ADD START
    for (int i = 0; i < 2; i++)
    {
        int nSelModuleIndex = i;
        CDiagnosisInfo* pSettingInfo = m_pManager->GetDiagnosisInfo();
        if (pSettingInfo == NULL) {
            m_pDP2P->IDP2P_UpdateDialog(4);
            return 0;
        }
        CDiagnosisResult* pProcessResult = m_pManager->GetDiagnosisResult_Squareness(nSelModuleIndex); // 0412 kyh 직각도 측정 모듈에 대한 결과정보
        if (pProcessResult == NULL) {
            m_pDP2P->IDP2P_UpdateDialog(4);
            return 0;
        }
        CDiagnosisResult* pProcessWSIResult = m_pManager->GetDiagnosisResult_Wsi(nSelModuleIndex); // 0412 kyh WSI 측정 모듈에 대한 결과 정보
        if (pProcessWSIResult == NULL) {
            m_pDP2P->IDP2P_UpdateDialog(6);
            return 0;
        }
        CString strMessage = _T("");
        double dDate = (90 - pProcessResult->GetGantryDegree());
        if (abs(dDate) >= abs(pSettingInfo->GetJudgeData_Degree())) // 0412 kyh 직각도에서 나온 Dgree 값이 설정한 Judge 값보다 크거나 같을경우
        {
            m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // 알람 발생
            strMessage.Format(_T("[Judge Data] [Gantry %d]Diagnosis Error ! GantryDegree[%lf] Judge[%lf]"), i, dDate, pSettingInfo->GetJudgeData_Degree());
            m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        }
        if (pProcessWSIResult->getWSI_RTB() >= pSettingInfo->GetJudgeData_3Sigma() || pProcessWSIResult->getWSI_RTB() <= 0) // 0412 kyh WSI 표준편차 비교
        {
            m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // 알람 발생
            strMessage.Format(_T("[Judge Data] [WSI %d]Diagnosis Error ! WSI RTB[%lf] Judge[%lf]"), i, pProcessWSIResult->getWSI_RTB(), pSettingInfo->GetJudgeData_3Sigma());
            m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        }
    if (ProcessDiagnosisJudge() == FALSE) {
        strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
        m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
    }
    //#3407 KYH 자가진단 Judge 판정 및 알람 발생 기능 ADD END
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    //컴플릿트 신호 보내기
    m_pDP2P->IDP2P_DiagnosisSendCompleteSig();
    m_pManager->m_bProcessAll = false;
    return 1;
@@ -284,7 +300,10 @@
        int stTime = GetTickCount();
        while (1)
        {
            if (11000 <= GetTickCount() - stTime)
            //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
            //if (11000 <= GetTickCount() - stTime)
            //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
            if (1000 <= GetTickCount() - stTime)
            {
                break;
            }
@@ -292,14 +311,22 @@
        }
        m_pDP2P->IDP2P_SetAFMTracking(nSelModuleIndex, TRUE);
        Sleep(1000);
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
        //Sleep(1000);
        Sleep(500);
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
        CString strimagename;
        strimagename.Format(_T("%s_Module[%d]Index[%d].bmp"), m_pManager->m_strResultImageFileName, nSelModuleIndex, nIdx);
        // find mark at panel
        double dFindPixX = 0., dFindPixY = 0.;
        if (m_pDP2P->IDP2P_FindPanelCenter(nSelModuleIndex, dFindPixX, dFindPixY, strimagename) == FALSE) continue;
        if (m_pDP2P->IDP2P_FindPanelCenter(nSelModuleIndex, dFindPixX, dFindPixY, strimagename) == FALSE) {
            strMessage.Format(_T("[CDiagnosisProcessor] find mark at panel FAIL"));
            m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
            continue;
        }
        m_pDP2P->IDP2P_SetAFMTracking(nSelModuleIndex, FALSE);
@@ -435,7 +462,10 @@
        }
        m_pDP2P->IDP2P_SetWsiManualMeasure(nSelModuleIndex, dXpos, dYpos);
        // move panel
        Sleep(2000);
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
        //Sleep(2000);
        Sleep(1000);
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
        m_pDP2P->IDP2P_MotorGo(nSelModuleIndex, dXpos, dYpos);
        if (m_pDP2P->IDP2P_IsGantryMotionEnd(nSelModuleIndex) == FALSE)
@@ -447,7 +477,10 @@
        int stTime = GetTickCount();
        while (1)
        {
            if (10000 <= GetTickCount() - stTime)
            //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
            //if (10000 <= GetTickCount() - stTime)
            if (1000 <= GetTickCount() - stTime)
            //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
            {
                break;
            }
@@ -508,8 +541,18 @@
{
    if (m_pDP2P == NULL || m_pManager == NULL) return 0;
    CString strMessage = "";
    CDiagnosisInfo * pSettingInfo = m_pManager->GetDiagnosisInfo();
    if (pSettingInfo == NULL) return 0;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    if (pSettingInfo->GetFlastnessSkipMode() == TRUE) {
        strMessage.Format(_T("[CDiagnosisProcessor] FlastnessSkipMode!"));
        m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        return 0;
    }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    int nSelModuleIndex = m_pDP2P->IDP2P_GetSelectedModuleIndex();
    int nFlatnessMode = pSettingInfo->GetFlatnessMode();
@@ -550,7 +593,10 @@
        {
            // AF Home
            m_pDP2P->IDP2P_AFMHomePosition(0);
            Sleep(5000);
            //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
            //Sleep(5000);
            Sleep(1000);
            //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
            m_pDP2P->IDP2P_SetAFMTracking(0, TRUE);
            Sleep(500);
        }
@@ -689,6 +735,55 @@
    return TRUE;
}
int CDiagnosisProcessor::ProcessDiagnosisJudge()
{
    for (int i = 0; i < 2; i++)
    {
        int nSelModuleIndex = i;
        CDiagnosisInfo* pSettingInfo = m_pManager->GetDiagnosisInfo();
        if (pSettingInfo == NULL) {
            m_pDP2P->IDP2P_UpdateDialog(4);
            return 0;
        }
        CDiagnosisResult* pProcessResult = m_pManager->GetDiagnosisResult_Squareness(nSelModuleIndex); // 0412 kyh 직각도 측정 모듈에 대한 결과정보
        if (pProcessResult == NULL) {
            m_pDP2P->IDP2P_UpdateDialog(4);
            return 0;
        }
        CDiagnosisResult* pProcessWSIResult = m_pManager->GetDiagnosisResult_Wsi(nSelModuleIndex); // 0412 kyh WSI 측정 모듈에 대한 결과 정보
        if (pProcessWSIResult == NULL) {
            m_pDP2P->IDP2P_UpdateDialog(6);
            return 0;
        }
        CString strMessage = _T("");
        double dDate = (90 - pProcessResult->GetGantryDegree());
        if (abs(dDate) >= abs(pSettingInfo->GetJudgeData_Degree())) // 0412 kyh 직각도에서 나온 Dgree 값이 설정한 Judge 값보다 크거나 같을경우
        {
            m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // 알람 발생
            strMessage.Format(_T("[Judge Data] [Gantry %d]Diagnosis Error ! GantryDegree[%lf] Judge[%lf]"), i, dDate, pSettingInfo->GetJudgeData_Degree());
            m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        }
        if (pProcessWSIResult->getWSI_RTB() >= pSettingInfo->GetJudgeData_3Sigma() || pProcessWSIResult->getWSI_RTB() <= 0) // 0412 kyh WSI 표준편차 비교
        {
            m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // 알람 발생
            strMessage.Format(_T("[Judge Data] [WSI %d]Diagnosis Error ! WSI RTB[%lf] Judge[%lf]"), i, pProcessWSIResult->getWSI_RTB(), pSettingInfo->GetJudgeData_3Sigma());
            m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        }
    }
    //#3407 KYH 자가진단 Judge 판정 및 알람 발생 기능 ADD END
    //컴플릿트 신호 보내기
    m_pDP2P->IDP2P_DiagnosisSendCompleteSig();
    return 1;
}
BOOL CDiagnosisProcessor::CalculateSquareness(int nIndex)
{
    if (m_pDP2P == NULL || m_pManager == NULL) return 0;
ReviewSystem/M_AutoDiagnosisManager/M_AutoDiagnosisManager.vcxproj
@@ -190,6 +190,7 @@
      </ModuleDefinitionFile>
      <AdditionalLibraryDirectories>../lib;../../Internal_Library/lib;</AdditionalLibraryDirectories>
      <AdditionalDependencies>CHThreadPools_x64_vc15.lib</AdditionalDependencies>
      <ImportLibrary>$(SolutionDir)\lib\$(TargetName).lib</ImportLibrary>
    </Link>
    <Midl>
      <MkTypLibCompatible>false</MkTypLibCompatible>
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Flatness.cpp
@@ -982,6 +982,20 @@
void CDlgSelfDiagnosis_Flatness::OnBnClickedButtonSimulation()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    if (m_pDiagnosisManager->CheckManualMode() == FALSE)
    {
        CString strMessage;
        strMessage.Format(_T("Change Manual Mode!!"));
        if (IDOK == AfxMessageBox(strMessage, MB_OK | MB_ICONERROR))
        {
            g_pLog->DisplayMessage(_T("Manual Diagnosis Fail! Not Manual Mode"));
            return;
        }
    }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    if (m_bState == FALSE)
    {
        m_bState = TRUE;
@@ -999,6 +1013,19 @@
void CDlgSelfDiagnosis_Flatness::OnBnClickedButtonManual()
{
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    if (m_pDiagnosisManager->CheckManualMode() == FALSE)
    {
        CString strMessage;
        strMessage.Format(_T("Change Manual Mode!!"));
        if (IDOK == AfxMessageBox(strMessage, MB_OK | MB_ICONERROR))
        {
            g_pLog->DisplayMessage(_T("Manual Diagnosis Fail! Not Manual Mode"));
            return;
        }
    }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    m_pDiagnosisManager->ManualMeasure_Flatness();
}
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.cpp
@@ -56,6 +56,12 @@
    DDX_Control(pDX, IDC_EDIT_WSI_PANEL_POS_Y, m_editPanelPosY);
    DDX_Control(pDX, IDC_EDIT_WSI_PANEL_POS_X2, m_editPanelPosX2);
    DDX_Control(pDX, IDC_EDIT_WSI_PANEL_POS_Y2, m_editPanelPosY2);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    DDX_Control(pDX, IDC_CHECK_SELF_DIAGNOSIS_FLATNESS_SKIP, m_CheckFlatnessSkip);
    DDX_Control(pDX, IDC_EDIT_SQUARENESS_STANDARD, m_editSquarenessStandard);
    DDX_Control(pDX, IDC_EDIT_SQUARENESS_STANDARD2, m_editSquarenessStandard2);
    DDX_Control(pDX, IDC_EDIT_WSI_STANDARD, m_editWSIStandard);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    DDX_Text(pDX, IDC_EDIT_REVIEW_PANEL_POS_X, m_dEditReviewPanelPosX);
    DDX_Text(pDX, IDC_EDIT_REVIEW_PANEL_POS_Y, m_dEditReviewPanelPosY);
    DDX_Text(pDX, IDC_EDIT_REVIEW_PANEL_POS_X2, m_dEditReviewPanelPosX2);
@@ -111,16 +117,19 @@
BOOL CDlgSelfDiagnosis_Setting::ReadAutoDiagnosisConfigFile()
{
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    CString strConfigFilePath = _T("");
    strConfigFilePath.Format(_T("%s\\%s"), REVIEW_AUTO_DIAGNOSIS_SETTING_FILE_PATH, REVIEW_AUTO_DIAGNOSIS_SETTING_FILE_NAME);
    m_pDiagnosisManager->LoadSettingConfigFile(strConfigFilePath);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    CDiagnosisInfo* pSettingInfo = m_pDiagnosisManager->GetDiagnosisInfo();
    if (pSettingInfo == NULL)
        return FALSE;
    CString strTemp = _T("");
    CString strFilePath = REVIEW_AUTO_DIAGNOSIS_SETTING_FILE_PATH;
    CString strFileName = _T("AutoDiagnosisSetting.cfg");
    m_editFilePath.SetWindowTextA(strFilePath +_T('\\') + strFileName);
    m_editFilePath.SetWindowTextA(strConfigFilePath);
    strTemp.Format("%d", pSettingInfo->GetModuleCount());
    m_editModuleCount.SetWindowTextA(strTemp);
@@ -133,6 +142,14 @@
    strTemp.Format("%f", pSettingInfo->GetJudgeData_Degree());
    m_editJudgeData_Degree.SetWindowTextA(strTemp);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    strTemp.Format("%f", pSettingInfo->GetSquarenessStandard());
    m_editSquarenessStandard.SetWindowTextA(strTemp);
    strTemp.Format("%f", pSettingInfo->GetSquarenessStandard2());
    m_editSquarenessStandard2.SetWindowTextA(strTemp);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    strTemp.Format("%d", pSettingInfo->GetCameraFrameWidth());
    m_editFrameWidth.SetWindowTextA(strTemp);
@@ -166,12 +183,20 @@
    strTemp.Format("%d", pSettingInfo->GetGlassSizeY_Flatness());
    m_editGlassSizeY.SetWindowTextA(strTemp);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    m_CheckFlatnessSkip.SetCheck(pSettingInfo->GetFlastnessSkipMode());
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    strTemp.Format("%d", pSettingInfo->GetPanelCount_Wsi());
    m_editPanelCount_Wsi.SetWindowTextA(strTemp);
    strTemp.Format("%f", pSettingInfo->GetJudgeData_3Sigma());
    m_editJudgeData_3Sigma.SetWindowTextA(strTemp);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    strTemp.Format("%f", pSettingInfo->GetWSIStandard());
    m_editWSIStandard.SetWindowTextA(strTemp);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    strTemp.Format("%f", pSettingInfo->GetPanelPosX_Wsi());
    m_editPanelPosX.SetWindowTextA(strTemp);
@@ -278,6 +303,28 @@
    nTemp = atoi(strTemp);
    macroFile.SetItem(strItem, nTemp);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    strItem.Format(_T("FLATNESS_SKIPMODE"));
    nTemp = m_CheckFlatnessSkip.GetCheck();
    macroFile.SetItem(strItem, nTemp);
    strItem.Format(_T("SQUARENESS_STANDARD"));
    m_editSquarenessStandard.GetWindowTextA(strTemp);
    dTemp = atof(strTemp);
    macroFile.SetItem(strItem, dTemp);
    strItem.Format(_T("SQUARENESS_STANDARD2"));
    m_editSquarenessStandard2.GetWindowTextA(strTemp);
    dTemp = atof(strTemp);
    macroFile.SetItem(strItem, dTemp);
    strItem.Format(_T("WSI_STANDARD"));
    m_editWSIStandard.GetWindowTextA(strTemp);
    dTemp = atof(strTemp);
    macroFile.SetItem(strItem, dTemp);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    strItem.Format(_T("WSI_PANEL_COUNT"));
    m_editPanelCount_Wsi.GetWindowTextA(strTemp);
    nTemp = atoi(strTemp);
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.h
@@ -63,4 +63,9 @@
    double m_dEditReviewPanelPosY5;
    double m_dEditReviewPanelPosX6;
    double m_dEditReviewPanelPosY6;
public:
    CButton m_CheckFlatnessSkip;
    CEdit m_editSquarenessStandard;
    CEdit m_editSquarenessStandard2;
    CEdit m_editWSIStandard;
};
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.cpp
@@ -15,7 +15,7 @@
CDlgSelfDiagnosis_Squareness::CDlgSelfDiagnosis_Squareness(CDiagnosisManager* pDiagnosisManager, CWnd* pParent /*=nullptr*/)
    : CDialogEx(IDD_DLG_SELF_DIAGNOSIS_SQUARENESS, pParent)
    , m_nSelModuleIndex(0)
    , m_dEditTheta(0)
    , m_dEditLeftTheta(0)
    , m_dEditMotorX_1(0)
    , m_dEditMotorY_1(0)
    , m_dEditPixelX_1(0)
@@ -28,6 +28,21 @@
    , m_dEditMotorY_3(0)
    , m_dEditPixelX_3(0)
    , m_dEditPixelY_3(0)
    , m_dEditRightTheta(0)
    , m_dEditMotorX_4(0)
    , m_dEditMotorY_4(0)
    , m_dEditPixelX_4(0)
    , m_dEditPixelY_4(0)
    , m_dEditMotorX_5(0)
    , m_dEditMotorY_5(0)
    , m_dEditPixelX_5(0)
    , m_dEditPixelY_5(0)
    , m_dEditMotorX_6(0)
    , m_dEditMotorY_6(0)
    , m_dEditPixelX_6(0)
    , m_dEditPixelY_6(0)
    , m_editFirstSettingStandard(0)
    , m_editFirstSettingStandard2(0)
{
    m_pDiagnosisManager = pDiagnosisManager;
}
@@ -41,7 +56,7 @@
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_GRID_GANTRY_DATA_HISTORY, m_ctrlGridGantryDataHistory);
    DDX_Control(pDX, IDC_LIST, m_ctrlListFileHistory);
    DDX_Text(pDX, IDC_EDIT_GANTRY_THETA, m_dEditTheta);
    DDX_Text(pDX, IDC_EDIT_GANTRY_THETA, m_dEditLeftTheta);
    DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_X, m_dEditMotorX_1);
    DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y, m_dEditMotorY_1);
    DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X, m_dEditPixelX_1);
@@ -55,6 +70,22 @@
    DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y3, m_dEditMotorY_3);
    DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X3, m_dEditPixelX_3);
    DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_Y3, m_dEditPixelY_3);
    DDX_Text(pDX, IDC_EDIT_GANTRY_THETA2, m_dEditRightTheta);
    DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_X4, m_dEditMotorX_4);
    DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y4, m_dEditMotorY_4);
    DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X4, m_dEditPixelX_4);
    DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_Y4, m_dEditPixelY_4);
    DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_X5, m_dEditMotorX_5);
    DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y5, m_dEditMotorY_5);
    DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X5, m_dEditPixelX_5);
    DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_Y5, m_dEditPixelY_5);
    DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_X6, m_dEditMotorX_6);
    DDX_Text(pDX, IDC_EDIT_GANTRY_MOTOR_Y6, m_dEditMotorY_6);
    DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_X6, m_dEditPixelX_6);
    DDX_Text(pDX, IDC_EDIT_GANTRY_PIXEL_Y6, m_dEditPixelY_6);
    DDX_Text(pDX, IDC_EDIT_SQUARENESS_FIRSTSETTING, m_editFirstSettingStandard);
    DDX_Text(pDX, IDC_EDIT_SQUARENESS_FIRSTSETTING2, m_editFirstSettingStandard2);
    //DDX_Control(pDX, IDC_BUTTON_SIMULATION, m_BtSumulation);
    //DDX_Control(pDX, IDC_BUTTON_SIMULATION, m_BtSumulation);
    DDX_Control(pDX, IDC_BUTTON_SIMULATION2, m_BtSumulation);
@@ -157,88 +188,135 @@
        const CDiagnosisInfo* pSettingInfo = m_pDiagnosisManager->GetDiagnosisInfo();
        if (pSettingInfo == NULL) return;
        const CDiagnosisResult* pStandardResult = pSettingInfo->GetSettingResult_Squareness(m_nSelModuleIndex);
        if (pStandardResult == NULL) return;
        m_editFirstSettingStandard = pSettingInfo->GetSquarenessStandard();
        m_editFirstSettingStandard2 = pSettingInfo->GetSquarenessStandard2();
        if (bLoadResult) // update load file data
        {
            const CDiagnosisResult* pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(m_nSelModuleIndex);
            const CDiagnosisResult* pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(0);
            if (pResult == NULL) return;
            // result : theta, pixel position
            m_dEditTheta = pResult->GetGantryDegree();
            m_dEditLeftTheta = pResult->GetGantryDegree();
            for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
            {
                const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx);
                if (pPosData == NULL) continue;
                if (pPosData->nIndex == PanelPosition_Base)
                if (pPosData->nPosMode == PanelPosition_Base)
                {
                    m_dEditPixelX_1 = pPosData->dPixelX;
                    m_dEditPixelY_1 = pPosData->dPixelY;
                }
                else if (pPosData->nIndex == PanelPosition_Sub)
                else if (pPosData->nPosMode == PanelPosition_Sub)
                {
                    m_dEditPixelX_2 = pPosData->dPixelX;
                    m_dEditPixelY_2 = pPosData->dPixelY;
                }
                else if (pPosData->nIndex == PanelPosition_Addition)
                else if (pPosData->nPosMode == PanelPosition_Addition)
                {
                    m_dEditPixelX_3 = pPosData->dPixelX;
                    m_dEditPixelY_3 = pPosData->dPixelY;
                }
            }
            pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(1);
            if (pResult == NULL) return;
            // result : theta, pixel position
            m_dEditRightTheta = pResult->GetGantryDegree();
            for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
            {
                const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx+3);
                if (pPosData == NULL) continue;
                if (pPosData->nPosMode == PanelPosition_Base)
                {
                    m_dEditPixelX_4 = pPosData->dPixelX;
                    m_dEditPixelY_4 = pPosData->dPixelY;
                }
                else if (pPosData->nPosMode == PanelPosition_Sub)
                {
                    m_dEditPixelX_5 = pPosData->dPixelX;
                    m_dEditPixelY_5 = pPosData->dPixelY;
                }
                else if (pPosData->nPosMode == PanelPosition_Addition)
                {
                    m_dEditPixelX_6 = pPosData->dPixelX;
                    m_dEditPixelY_6 = pPosData->dPixelY;
                }
            }
        }
        else if (bLoadResult == FALSE && m_pDiagnosisManager->ExistStandardData() == FALSE)// update setting data
        {
            const CDiagnosisResult* pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(m_nSelModuleIndex);
            const CDiagnosisResult* pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(0);
            if (pResult == NULL) return;
            // result : theta, pixel position
            m_dEditTheta = pResult->GetGantryDegree();
            m_dEditLeftTheta = pResult->GetGantryDegree();
            for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
            {
                const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx);
                if (pPosData == NULL) continue;
                if (pPosData->nIndex == PanelPosition_Base)
                if (pPosData->nPosMode == PanelPosition_Base)
                {
                    m_dEditPixelX_1 = pPosData->dPixelX;
                    m_dEditPixelY_1 = pPosData->dPixelY;
                }
                else if (pPosData->nIndex == PanelPosition_Sub)
                else if (pPosData->nPosMode == PanelPosition_Sub)
                {
                    m_dEditPixelX_2 = pPosData->dPixelX;
                    m_dEditPixelY_2 = pPosData->dPixelY;
                }
                else if (pPosData->nIndex == PanelPosition_Addition)
                else if (pPosData->nPosMode == PanelPosition_Addition)
                {
                    m_dEditPixelX_3 = pPosData->dPixelX;
                    m_dEditPixelY_3 = pPosData->dPixelY;
                }
            }
            pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(1);
            if (pResult == NULL) return;
            // result : theta, pixel position
            m_dEditLeftTheta = pResult->GetGantryDegree();
            for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
            {
                const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx+3);
                if (pPosData == NULL) continue;
                if (pPosData->nPosMode == PanelPosition_Base)
                {
                    m_dEditPixelX_4 = pPosData->dPixelX;
                    m_dEditPixelY_4 = pPosData->dPixelY;
                }
                else if (pPosData->nPosMode == PanelPosition_Sub)
                {
                    m_dEditPixelX_5 = pPosData->dPixelX;
                    m_dEditPixelY_5 = pPosData->dPixelY;
                }
                else if (pPosData->nPosMode == PanelPosition_Addition)
                {
                    m_dEditPixelX_6 = pPosData->dPixelX;
                    m_dEditPixelY_6 = pPosData->dPixelY;
                }
            }
        }
        else
        {
            int nPlanindex = 0;
            // result : theta, pixel position
            const CDiagnosisResult* pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(m_nSelModuleIndex);
            const CDiagnosisResult* pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(0);
            if (pResult == NULL) return;
            BOOL bProcess = FALSE;
            for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
            {
                if (m_nSelModuleIndex == 1)
                {
                    nPlanindex = nPIdx + 3;
                }
                else
                {
                    nPlanindex = nPIdx;
                }
                const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPlanindex);
                const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx);
                if (pPosData == NULL) continue;
                if (pPosData->nPosMode == PanelPosition_Base)
@@ -247,13 +325,13 @@
                    m_dEditPixelY_1 = pPosData->dPixelY;
                    bProcess = pPosData->bProcsss;
                }
                else if (pPosData->nIndex == PanelPosition_Sub)
                else if (pPosData->nPosMode == PanelPosition_Sub)
                {
                    m_dEditPixelX_2 = pPosData->dPixelX;
                    m_dEditPixelY_2 = pPosData->dPixelY;
                    bProcess &= pPosData->bProcsss;
                }
                else if (pPosData->nIndex == PanelPosition_Addition)
                else if (pPosData->nPosMode == PanelPosition_Addition)
                {
                    m_dEditPixelX_3 = pPosData->dPixelX;
                    m_dEditPixelY_3 = pPosData->dPixelY;
@@ -261,8 +339,41 @@
                }
            }
            m_dEditTheta = bProcess ? pResult->GetGantryDegree() : 0.;
            m_dEditLeftTheta = bProcess ? pResult->GetGantryDegree() : 0.;
            pResult = m_pDiagnosisManager->GetDiagnosisResult_Squareness(1);
            if (pResult == NULL) return;
            bProcess = FALSE;
            for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
            {
                const SPositionData* pPosData = pResult->GetPositionData_Squareness(nPIdx+3);
                if (pPosData == NULL) continue;
                if (pPosData->nPosMode == PanelPosition_Base)
                {
                    m_dEditPixelX_4 = pPosData->dPixelX;
                    m_dEditPixelY_4 = pPosData->dPixelY;
                    bProcess = pPosData->bProcsss;
                }
                else if (pPosData->nPosMode == PanelPosition_Sub)
                {
                    m_dEditPixelX_5 = pPosData->dPixelX;
                    m_dEditPixelY_5 = pPosData->dPixelY;
                    bProcess &= pPosData->bProcsss;
                }
                else if (pPosData->nPosMode == PanelPosition_Addition)
                {
                    m_dEditPixelX_6 = pPosData->dPixelX;
                    m_dEditPixelY_6 = pPosData->dPixelY;
                    bProcess &= pPosData->bProcsss;
                }
            }
            m_dEditRightTheta = bProcess ? pResult->GetGantryDegree() : 0.;
        }
        const CDiagnosisResult* pStandardResult = pSettingInfo->GetSettingResult_Squareness(0);
        // info : motor position
        for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
@@ -284,6 +395,30 @@
            {
                m_dEditMotorX_3 = pPosData->dPosX;
                m_dEditMotorY_3 = pPosData->dPosY;
            }
        }
        pStandardResult = pSettingInfo->GetSettingResult_Squareness(1);
        for (int nPIdx = 0; nPIdx < pSettingInfo->GetPanelCount_Squareness(); nPIdx++)
        {
            const SPositionData* pPosData = pStandardResult->GetPositionData_Squareness(nPIdx);
            if (pPosData == NULL) continue;
            if (pPosData->nIndex == PanelPosition_Base)
            {
                m_dEditMotorX_4 = pPosData->dPosX;
                m_dEditMotorY_4 = pPosData->dPosY;
            }
            else if (pPosData->nIndex == PanelPosition_Sub)
            {
                m_dEditMotorX_5 = pPosData->dPosX;
                m_dEditMotorY_5 = pPosData->dPosY;
            }
            else if (pPosData->nIndex == PanelPosition_Addition)
            {
                m_dEditMotorX_6 = pPosData->dPosX;
                m_dEditMotorY_6 = pPosData->dPosY;
            }
        }
    
@@ -414,8 +549,22 @@
void CDlgSelfDiagnosis_Squareness::OnBnClickedButtonSimulation2()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    if (m_pDiagnosisManager == NULL) return;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    if (m_pDiagnosisManager->CheckManualMode() == FALSE)
    {
        CString strMessage;
        strMessage.Format(_T("Change Manual Mode!!"));
        if (IDOK == AfxMessageBox(strMessage, MB_OK | MB_ICONERROR))
        {
            g_pLog->DisplayMessage(_T("Manual Diagnosis Fail! Not Manual Mode"));
            return;
        }
    }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    GetDialogControls();
    m_pDiagnosisManager->RecvSignalToSignalControl(DiagnosisSignal_Manual, DiagnosisMode_Squareness, TRUE);
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.h
@@ -46,7 +46,7 @@
    CListBox m_ctrlListFileHistory;
    CComboBox m_ctrlComboModuleIndex;
    int m_nSelModuleIndex;
    double m_dEditTheta;
    double m_dEditLeftTheta;
    double m_dEditMotorX_1;
    double m_dEditMotorY_1; 
    double m_dEditPixelX_1;
@@ -59,6 +59,21 @@
    double m_dEditMotorY_3;
    double m_dEditPixelX_3;
    double m_dEditPixelY_3;
    double m_dEditRightTheta;
    double m_dEditMotorX_4;
    double m_dEditMotorY_4;
    double m_dEditPixelX_4;
    double m_dEditPixelY_4;
    double m_dEditMotorX_5;
    double m_dEditMotorY_5;
    double m_dEditPixelX_5;
    double m_dEditPixelY_5;
    double m_dEditMotorX_6;
    double m_dEditMotorY_6;
    double m_dEditPixelX_6;
    double m_dEditPixelY_6;
    CButton m_BtSumulation;
    afx_msg void OnBnClickedButtonSimulation2();
    double m_editFirstSettingStandard;
    double m_editFirstSettingStandard2;
};
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp
@@ -16,6 +16,7 @@
    : CDialogEx(IDD_DLG_SELF_DIAGNOSIS_WSI, pParent)
{
    m_pDiagnosisManager = pDiagnosisManager;
    m_editWSIFirstStandard = 180;
}
CDlgSelfDiagnosis_Wsi::~CDlgSelfDiagnosis_Wsi()
@@ -30,6 +31,27 @@
    DDX_Control(pDX, IDC_EDIT_WSI_RTB_00, m_ctrlWsiRtb00);
    DDX_Control(pDX, IDC_EDIT_WSI_RTB_01, m_ctrlWsiRtb01);
    DDX_Control(pDX, IDC_BUTTON_SIMULATION, m_btSimulation);
    DDX_Text(pDX, IDC_EDIT_WSI_FIRST_STANDARD, m_editWSIFirstStandard);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT1, m_editWSIHeight1);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT2, m_editWSIHeight2);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT3, m_editWSIHeight3);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT4, m_editWSIHeight4);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT5, m_editWSIHeight5);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT6, m_editWSIHeight6);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT7, m_editWSIHeight7);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT8, m_editWSIHeight8);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT9, m_editWSIHeight9);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT10, m_editWSIHeight10);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT11, m_editWSIHeight11);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT12, m_editWSIHeight12);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT13, m_editWSIHeight13);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT14, m_editWSIHeight14);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT15, m_editWSIHeight15);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT16, m_editWSIHeight16);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT17, m_editWSIHeight17);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT18, m_editWSIHeight18);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT19, m_editWSIHeight19);
    DDX_Control(pDX, IDC_EDIT_WSI_HEIGHT20, m_editWSIHeight20);
}
@@ -45,9 +67,20 @@
void CDlgSelfDiagnosis_Wsi::OnBnClickedButtonSimulation()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    if (m_pDiagnosisManager == NULL) return;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    if (m_pDiagnosisManager->CheckManualMode() == FALSE)
    {
        CString strMessage;
        strMessage.Format(_T("Change Manual Mode!!"));
        if (IDOK == AfxMessageBox(strMessage, MB_OK | MB_ICONERROR))
        {
            g_pLog->DisplayMessage(_T("Manual Diagnosis Fail! Not Manual Mode"));
            return;
        }
    }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    //GetDialogControls();
@@ -71,19 +104,96 @@
{
    const CDiagnosisInfo* pSettingInfo = m_pDiagnosisManager->GetDiagnosisInfo();
    if (pSettingInfo == NULL) return;
    m_editWSIFirstStandard = pSettingInfo->GetWSIStandard();
    
    double nACC00 = m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->getWSI_ACC();
    double nACC01 = m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->getWSI_ACC();
    double nRTB00 =  m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->getWSI_RTB();
    double nRTB01 = m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->getWSI_RTB();
    double dDiagnosisHeight[20];
    for (int i = 0; i < 10; i++)
    {
        dDiagnosisHeight[i] = m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->GetDiagnosisHeight(i);
    }
    for (int i = 0; i < 10; i++)
    {
        dDiagnosisHeight[i+10] = m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->GetDiagnosisHeight(i);
    }
    CString strDiagnosisHeight;
    CString strACC00, strACC01;
    CString strRTB00, strRTB01;
    strACC00.Format(_T("%d"), nACC00);
    strACC01.Format(_T("%d"), nACC01);
    strRTB00.Format(_T("%d"), nRTB00);
    strRTB01.Format(_T("%d"), nRTB01);
    m_ctrlWsiAcc00.SetWindowTextA(strACC00);
    m_ctrlWsiAcc01.SetWindowTextA(strACC01);
    m_ctrlWsiRtb00.SetWindowTextA(strRTB00);
    m_ctrlWsiRtb01.SetWindowTextA(strRTB01);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[0]);
    m_editWSIHeight1.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[1]);
    m_editWSIHeight2.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[2]);
    m_editWSIHeight3.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[3]);
    m_editWSIHeight4.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[4]);
    m_editWSIHeight5.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[5]);
    m_editWSIHeight6.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[6]);
    m_editWSIHeight7.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[7]);
    m_editWSIHeight8.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[8]);
    m_editWSIHeight9.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[9]);
    m_editWSIHeight10.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[10]);
    m_editWSIHeight11.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[11]);
    m_editWSIHeight12.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[12]);
    m_editWSIHeight13.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[13]);
    m_editWSIHeight14.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[14]);
    m_editWSIHeight15.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[15]);
    m_editWSIHeight16.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[16]);
    m_editWSIHeight17.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[17]);
    m_editWSIHeight18.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[18]);
    m_editWSIHeight19.SetWindowTextA(strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[19]);
    m_editWSIHeight20.SetWindowTextA(strDiagnosisHeight);
    
}
@@ -108,6 +218,8 @@
    const CDiagnosisInfo* pSettingInfo = m_pDiagnosisManager->GetDiagnosisInfo();
    if (pSettingInfo == NULL) return;
    m_editWSIFirstStandard = pSettingInfo->GetWSIStandard();
    double nACC00 = dAcc00;
    double nACC01 = dAcc01;
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.h
@@ -34,4 +34,25 @@
    CEdit m_ctrlWsiRtb00;
    CEdit m_ctrlWsiRtb01;
    CButton m_btSimulation;
    double m_editWSIFirstStandard;
    CEdit m_editWSIHeight1;
    CEdit m_editWSIHeight2;
    CEdit m_editWSIHeight3;
    CEdit m_editWSIHeight4;
    CEdit m_editWSIHeight5;
    CEdit m_editWSIHeight6;
    CEdit m_editWSIHeight7;
    CEdit m_editWSIHeight8;
    CEdit m_editWSIHeight9;
    CEdit m_editWSIHeight10;
    CEdit m_editWSIHeight11;
    CEdit m_editWSIHeight12;
    CEdit m_editWSIHeight13;
    CEdit m_editWSIHeight14;
    CEdit m_editWSIHeight15;
    CEdit m_editWSIHeight16;
    CEdit m_editWSIHeight17;
    CEdit m_editWSIHeight18;
    CEdit m_editWSIHeight19;
    CEdit m_editWSIHeight20;
};
ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -2874,24 +2874,36 @@
            double dAccdata = measureResut.dAccuracy;
            double dRbtdata = measureResut.dRepeatability;
            double dDiagnosisHeight[10];
            for (int i = 0; i < 10; i++)
            {
                dDiagnosisHeight[i] = measureResut.dDiagnosisHeight[i];
            }
            if (nModuleIndex == 0)
            {
                m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->SetACC(dAccdata);
                m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->SetRTB(dRbtdata);
                for (int i = 0; i < 10; i++)
                {
                    m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->SetDiagnosisHeight(dDiagnosisHeight[i], i);
                }
                m_vecWSIControl[0]->SendWsiAfmSafePosMove();
            }
            else if (nModuleIndex == 1)
            {
                m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->SetACC(dAccdata);
                m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->SetRTB(dRbtdata);
                for (int i = 0; i < 10; i++)
                {
                    m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->SetDiagnosisHeight(dDiagnosisHeight[i], i);
                }
                m_vecWSIControl[1]->SendWsiAfmSafePosMove();
            }
        
            m_pDlgDiagnosis->m_pDlgWsi->UpdateWSIResult(nModuleIndex,dAccdata, dAccdata, dRbtdata, dRbtdata);
            m_pDlgDiagnosis->m_pDiagnosisManager->setWSIVLSIEnd(true);
        }
@@ -3508,6 +3520,16 @@
}
BOOL CReviewInterface::IDP2P_CheckManualMode()
{
    if (IsManualProcessMode() == TRUE)
    {
        return TRUE;
    }
    return FALSE;
}
int CReviewInterface::IDP2P_GetSelectedModuleIndex()
{
    return Module_GetSelectedModuleIndex();
ReviewSystem/ReviewSystem/ReviewInterface.h
@@ -209,6 +209,7 @@
    virtual void IDP2P_MotorGo(int nModuleIdx, double dPosX, double dPosY, BOOL bWaitReturn = FALSE);
    virtual BOOL IDP2P_GetMotionEnd(int nModuleIdx, int nTimeOut = -1);
    virtual BOOL IDP2P_IsGantryMotionEnd(int nModuleIdx);
    virtual BOOL IDP2P_CheckManualMode();
    // Squareness
    virtual int IDP2P_GetSelectedModuleIndex();
    virtual int IDP2P_GetOrigionMotorDir();
ReviewSystem/ReviewSystem/ReviewSystem.rc
@@ -576,42 +576,72 @@
BEGIN
    GROUPBOX        "File History",IDC_STATIC,7,286,421,86
    LISTBOX         IDC_LIST,14,297,409,69,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
    GROUPBOX        "Data History",IDC_STATIC,292,7,136,278
    CONTROL         "",IDC_GRID_GANTRY_DATA_HISTORY,"MFCGridCtrl",WS_TABSTOP,297,19,126,260
    LTEXT           "Module Index :",IDC_STATIC,21,29,48,8
    COMBOBOX        IDC_COMBO_MODULE_INDEX,71,28,48,34,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
    GROUPBOX        "Measure Data",IDC_STATIC,7,7,280,278
    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,98,67,37,37
    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,98,205,37,37
    CONTROL         IDB_BITMAP_GANTRY,IDC_STATIC,"Static",SS_BITMAP,40,70,39,168
    LTEXT           "Theta(θ) :",IDC_STATIC,40,242,38,8
    EDITTEXT        IDC_EDIT_GANTRY_THETA,40,253,40,14,ES_AUTOHSCROLL
    RTEXT           "[°]",IDC_STATIC,80,255,10,8
    LTEXT           ": Motor",IDC_STATIC,155,174,24,8
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X,82,116,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y,118,116,35,14,ES_AUTOHSCROLL
    LTEXT           ": Pixel",IDC_STATIC,155,190,24,8
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X,82,132,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y,118,132,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X2,82,172,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y2,118,172,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X2,82,188,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y2,118,188,35,14,ES_AUTOHSCROLL
    GROUPBOX        "Measure Data",IDC_STATIC,7,7,280,278
    CTEXT           "X",IDC_STATIC,95,106,8,8
    CTEXT           "Y",IDC_STATIC,130,106,8,8
    CTEXT           "X",IDC_STATIC,96,162,8,8
    CTEXT           "Y",IDC_STATIC,131,162,8,8
    PUSHBUTTON      "Simulation",IDC_BUTTON_SIMULATION2,224,253,50,14
    LTEXT           ": Motor",IDC_STATIC,245,119,24,8
    LTEXT           ": Pixel",IDC_STATIC,245,135,24,8
    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,189,67,37,37
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X3,172,116,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y3,208,116,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X3,172,132,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y3,208,132,35,14,ES_AUTOHSCROLL
    CTEXT           "X",IDC_STATIC,187,106,8,8
    CTEXT           "Y",IDC_STATIC,221,106,8,8
    GROUPBOX        "Data History",IDC_STATIC,337,7,91,278
    CONTROL         "",IDC_GRID_GANTRY_DATA_HISTORY,"MFCGridCtrl",WS_TABSTOP,342,19,81,260
    COMBOBOX        IDC_COMBO_MODULE_INDEX,123,18,48,34,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
    GROUPBOX        "Measure Data",IDC_STATIC,7,7,326,278
    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,25,59,37,37
    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,25,197,37,37
    LTEXT           "Left Module Theta(θ) :",IDC_STATIC,17,264,74,8
    EDITTEXT        IDC_EDIT_GANTRY_THETA,92,262,40,14,ES_AUTOHSCROLL
    RTEXT           "[°]",IDC_STATIC,135,264,10,8
    LTEXT           ": Motor",IDC_STATIC,82,166,24,8
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X,9,108,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y,45,108,35,14,ES_AUTOHSCROLL
    LTEXT           ": Pixel",IDC_STATIC,82,182,24,8
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X,9,124,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y,45,124,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X2,9,164,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y2,45,164,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X2,9,180,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y2,45,180,35,14,ES_AUTOHSCROLL
    GROUPBOX        "Measure Data",IDC_STATIC,7,7,327,278
    CTEXT           "X",IDC_STATIC,22,98,8,8
    CTEXT           "Y",IDC_STATIC,57,98,8,8
    CTEXT           "X",IDC_STATIC,23,154,8,8
    CTEXT           "Y",IDC_STATIC,58,154,8,8
    PUSHBUTTON      "Simulation",IDC_BUTTON_SIMULATION2,11,18,50,14
    LTEXT           ": Motor",IDC_STATIC,156,111,24,8
    LTEXT           ": Pixel",IDC_STATIC,156,127,24,8
    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,100,59,37,37
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X3,83,108,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y3,119,108,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X3,83,124,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y3,119,124,35,14,ES_AUTOHSCROLL
    CTEXT           "X",IDC_STATIC,98,98,8,8
    CTEXT           "Y",IDC_STATIC,132,98,8,8
    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,199,58,37,37
    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,199,196,37,37
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X4,183,107,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y4,219,107,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X4,183,123,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y4,219,123,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X5,183,163,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y5,219,163,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X5,183,179,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y5,219,179,35,14,ES_AUTOHSCROLL
    CTEXT           "X",IDC_STATIC,196,97,8,8
    CTEXT           "Y",IDC_STATIC,231,97,8,8
    CTEXT           "X",IDC_STATIC,197,153,8,8
    CTEXT           "Y",IDC_STATIC,232,153,8,8
    CONTROL         IDB_BITMAP_MARK,IDC_STATIC,"Static",SS_BITMAP,274,58,37,37
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_X6,257,107,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_MOTOR_Y6,293,107,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_X6,257,123,35,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GANTRY_PIXEL_Y6,293,123,35,14,ES_AUTOHSCROLL
    CTEXT           "X",IDC_STATIC,272,97,8,8
    CTEXT           "Y",IDC_STATIC,306,97,8,8
    GROUPBOX        "Right Module",IDC_STATIC,180,36,153,202
    GROUPBOX        "Left Module",IDC_STATIC,7,36,173,203
    LTEXT           "Right Module Theta(θ) :",IDC_STATIC,186,264,78,8
    EDITTEXT        IDC_EDIT_GANTRY_THETA2,264,262,40,14,ES_AUTOHSCROLL
    RTEXT           "[°]",IDC_STATIC,307,264,10,8
    LTEXT           "First Setting Standard(θ) :",IDC_STATIC,18,247,83,8
    EDITTEXT        IDC_EDIT_SQUARENESS_FIRSTSETTING,103,245,39,13,ES_AUTOHSCROLL
    RTEXT           "[°]",IDC_STATIC,145,247,10,8
    LTEXT           "First Setting Standard(θ) :",IDC_STATIC,185,247,83,8
    EDITTEXT        IDC_EDIT_SQUARENESS_FIRSTSETTING2,271,245,39,13,ES_AUTOHSCROLL
    RTEXT           "[°]",IDC_STATIC,313,247,10,8
END
IDD_DLG_SELF_DIAGNOSIS_FLATNESS DIALOGEX 0, 0, 435, 379
@@ -645,8 +675,8 @@
    GROUPBOX        "메뉴얼 조작",IDC_STATIC,18,21,80,40
    GROUPBOX        "File History",IDC_STATIC,5,245,421,86
    LISTBOX         IDC_LIST,10,257,413,69,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
    GROUPBOX        "Data",IDC_STATIC,11,127,409,116
    CONTROL         "ㄱ",IDC_GRID_WSI_RESULT_DATA,"MFCGridCtrl",WS_TABSTOP,17,137,400,100
    GROUPBOX        "Data",IDC_STATIC,172,16,248,227
    CONTROL         "ㄱ",IDC_GRID_WSI_RESULT_DATA,"MFCGridCtrl",WS_TABSTOP,409,231,6,6
    LTEXT           "Module 0",IDC_STATIC,37,80,30,8
    LTEXT           "Module 1",IDC_STATIC,37,95,30,8
    LTEXT           "ACC",IDC_STATIC,91,66,14,8
@@ -655,6 +685,71 @@
    EDITTEXT        IDC_EDIT_WSI_RTB_00,122,77,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_ACC_01,76,95,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_RTB_01,123,94,40,14,ES_AUTOHSCROLL
    LTEXT           "WSI Standard (um)",IDC_STATIC,32,113,65,10
    EDITTEXT        IDC_EDIT_WSI_FIRST_STANDARD,97,112,40,15,ES_AUTOHSCROLL
    LTEXT           "um",IDC_STATIC,267,33,19,12
    LTEXT           "WSI Height 1",IDC_STATIC,179,34,43,8
    LTEXT           "WSI Height 2",IDC_STATIC,179,48,43,8
    LTEXT           "WSI Height 3",IDC_STATIC,179,62,43,8
    LTEXT           "WSI Height 4",IDC_STATIC,179,76,43,8
    LTEXT           "WSI Height 5",IDC_STATIC,179,90,43,8
    LTEXT           "WSI Height 6",IDC_STATIC,179,104,43,8
    LTEXT           "WSI Height 7",IDC_STATIC,179,117,43,8
    LTEXT           "WSI Height 8",IDC_STATIC,179,132,43,8
    LTEXT           "WSI Height 9",IDC_STATIC,179,145,43,8
    LTEXT           "WSI Height 10",IDC_STATIC,179,158,47,8
    EDITTEXT        IDC_EDIT_WSI_HEIGHT1,227,33,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT2,227,47,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT3,227,61,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT4,226,75,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT5,226,89,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT6,226,103,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT7,226,117,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT8,226,131,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT9,226,145,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT10,226,158,39,12,ES_AUTOHSCROLL
    LTEXT           "um",IDC_STATIC,148,121,19,12
    LTEXT           "um",IDC_STATIC,267,47,19,12
    LTEXT           "um",IDC_STATIC,267,61,19,12
    LTEXT           "um",IDC_STATIC,267,75,19,12
    LTEXT           "um",IDC_STATIC,267,89,19,12
    LTEXT           "um",IDC_STATIC,267,103,19,12
    LTEXT           "um",IDC_STATIC,267,117,19,12
    LTEXT           "um",IDC_STATIC,267,131,19,12
    LTEXT           "um",IDC_STATIC,267,145,19,12
    LTEXT           "um",IDC_STATIC,267,159,19,12
    LTEXT           "um",IDC_STATIC,387,33,19,12
    LTEXT           "WSI Height 1",IDC_STATIC,299,34,43,8
    LTEXT           "WSI Height 2",IDC_STATIC,299,48,43,8
    LTEXT           "WSI Height 3",IDC_STATIC,299,62,43,8
    LTEXT           "WSI Height 4",IDC_STATIC,299,76,43,8
    LTEXT           "WSI Height 5",IDC_STATIC,299,90,43,8
    LTEXT           "WSI Height 6",IDC_STATIC,299,104,43,8
    LTEXT           "WSI Height 7",IDC_STATIC,299,117,43,8
    LTEXT           "WSI Height 8",IDC_STATIC,299,132,43,8
    LTEXT           "WSI Height 9",IDC_STATIC,299,145,43,8
    LTEXT           "WSI Height 10",IDC_STATIC,299,158,47,8
    EDITTEXT        IDC_EDIT_WSI_HEIGHT11,347,33,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT12,347,47,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT13,347,61,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT14,346,75,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT15,346,89,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT16,346,103,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT17,346,117,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT18,346,131,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT19,346,145,39,12,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_HEIGHT20,346,158,39,12,ES_AUTOHSCROLL
    LTEXT           "um",IDC_STATIC,387,47,19,12
    LTEXT           "um",IDC_STATIC,387,61,19,12
    LTEXT           "um",IDC_STATIC,387,75,19,12
    LTEXT           "um",IDC_STATIC,387,89,19,12
    LTEXT           "um",IDC_STATIC,387,103,19,12
    LTEXT           "um",IDC_STATIC,387,117,19,12
    LTEXT           "um",IDC_STATIC,387,131,19,12
    LTEXT           "um",IDC_STATIC,387,145,19,12
    LTEXT           "um",IDC_STATIC,387,159,19,12
    GROUPBOX        "Left",IDC_STATIC,176,24,105,154
    GROUPBOX        "Right",IDC_STATIC,296,24,105,154
END
IDD_DLG_SELF_DIAGNOSIS_SETTING DIALOGEX 0, 0, 435, 379
@@ -666,12 +761,12 @@
    LTEXT           "파일 위치 :",IDC_STATIC,18,36,31,8
    PUSHBUTTON      "Save",IDC_BUTTON_SAVE,371,351,50,14
    PUSHBUTTON      "Load",IDC_BUTTON_LOAD,320,351,50,14
    EDITTEXT        IDC_EDIT_PANEL_COUNT_SQUARENESS,67,94,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_CAMERA_RESOLUTION,183,94,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_JUDGE_DATA_DEGREE,67,111,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_MODULE_COUNT,67,127,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_CAMERA_FRAME_WIDTH,183,111,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_CAMERA_FRAME_HEIGHT,183,127,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_PANEL_COUNT_SQUARENESS,67,81,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_CAMERA_RESOLUTION,183,81,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_JUDGE_DATA_DEGREE,67,97,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_MODULE_COUNT,67,113,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_CAMERA_FRAME_WIDTH,183,96,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_CAMERA_FRAME_HEIGHT,183,112,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_REVIEW_PANEL_POS_X,43,184,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_REVIEW_PANEL_POS_Y,85,184,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_REVIEW_PANEL_POS_X3,43,200,40,14,ES_AUTOHSCROLL
@@ -685,47 +780,47 @@
    EDITTEXT        IDC_EDIT_REVIEW_PANEL_POS_X6,151,216,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_REVIEW_PANEL_POS_Y6,193,216,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_PANEL_COUNT_WSI,330,94,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_JUDGE_DATA_3SIGMA,330,111,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_JUDGE_DATA_3SIGMA,330,113,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_PANEL_POS_X,294,181,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_PANEL_POS_Y,336,181,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_PANEL_POS_X2,294,197,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_PANEL_POS_Y2,336,197,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_AF_DELAY,67,268,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_JUDGE_DATA_Z_RANGE,67,284,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GLASS_SIZE_X,183,268,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GLASS_SIZE_Y,183,284,40,14,ES_AUTOHSCROLL
    COMBOBOX        IDC_COMBO_FLANTESS_MODE,67,308,48,62,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
    GROUPBOX        "Setting",IDC_STATIC,7,60,414,282
    RTEXT           "Resolution :",IDC_STATIC,143,96,39,8
    RTEXT           "Panel Count :",IDC_STATIC,23,96,43,8
    RTEXT           "Judge Data :",IDC_STATIC,26,114,40,10
    RTEXT           "AF Delay :",IDC_STATIC,34,273,32,8
    RTEXT           "Judge Data :\n(Z Range)",IDC_STATIC,24,287,42,21
    RTEXT           "Mode :",IDC_STATIC,43,309,23,8
    RTEXT           "Range Count :",IDC_STATIC,136,309,46,8
    RTEXT           "GlassSizeX :",IDC_STATIC,146,273,36,8
    RTEXT           "GlassSizeY :",IDC_STATIC,145,287,37,8
    EDITTEXT        IDC_EDIT_AF_DELAY,67,275,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_JUDGE_DATA_Z_RANGE,67,291,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GLASS_SIZE_X,183,275,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_GLASS_SIZE_Y,183,291,40,14,ES_AUTOHSCROLL
    COMBOBOX        IDC_COMBO_FLANTESS_MODE,67,315,48,62,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
    GROUPBOX        "Setting",IDC_STATIC,7,67,414,282
    RTEXT           "Resolution :",IDC_STATIC,143,84,39,8
    RTEXT           "Panel Count :",IDC_STATIC,23,83,43,8
    RTEXT           "Judge Data :",IDC_STATIC,26,101,40,10
    RTEXT           "AF Delay :",IDC_STATIC,34,280,32,8
    RTEXT           "Judge Data :\n(Z Range)",IDC_STATIC,24,294,42,21
    RTEXT           "Mode :",IDC_STATIC,43,316,23,8
    RTEXT           "Range Count :",IDC_STATIC,136,316,46,8
    RTEXT           "GlassSizeX :",IDC_STATIC,146,280,36,8
    RTEXT           "GlassSizeY :",IDC_STATIC,145,294,37,8
    RTEXT           "Panel Count : ",IDC_STATIC,286,96,43,8
    RTEXT           "Judge Data :\n(3sigma)  ",IDC_STATIC,287,114,42,17
    GROUPBOX        "직각도",IDC_STATIC,15,83,233,166
    GROUPBOX        "평탄도",IDC_STATIC,15,253,233,80
    EDITTEXT        IDC_EDIT_RANGE_COUNT_FLATNESS,183,308,40,14,ES_AUTOHSCROLL | WS_DISABLED
    GROUPBOX        "직각도",IDC_STATIC,15,75,233,176
    GROUPBOX        "평탄도",IDC_STATIC,15,252,233,80
    EDITTEXT        IDC_EDIT_RANGE_COUNT_FLATNESS,183,315,40,14,ES_AUTOHSCROLL | WS_DISABLED
    GROUPBOX        "WSI",IDC_STATIC,254,83,164,146
    RTEXT           "Frame Width :",IDC_STATIC,135,114,47,8
    RTEXT           "Frame Height :",IDC_STATIC,127,131,55,8
    RTEXT           "Frame Width :",IDC_STATIC,135,99,47,8
    RTEXT           "Frame Height :",IDC_STATIC,127,115,55,8
    RTEXT           "[nm]",IDC_STATIC,372,114,16,8
    RTEXT           "[um]",IDC_STATIC,226,97,16,8
    RTEXT           "[um]",IDC_STATIC,226,81,16,8
    RTEXT           "[px]",IDC_STATIC,226,99,14,8
    RTEXT           "[px]",IDC_STATIC,226,114,14,8
    RTEXT           "[px]",IDC_STATIC,226,129,14,8
    RTEXT           "[°]",IDC_STATIC,109,114,10,8
    LTEXT           "[ms]",IDC_STATIC,109,273,15,8
    LTEXT           "[um]",IDC_STATIC,109,287,16,8
    LTEXT           "[ea]",IDC_STATIC,226,311,14,8
    LTEXT           "[mm]",IDC_STATIC,226,273,18,8
    LTEXT           "[mm]",IDC_STATIC,226,287,18,8
    LTEXT           "[ea]",IDC_STATIC,109,97,14,8
    RTEXT           "[°]",IDC_STATIC,109,99,10,8
    LTEXT           "[ms]",IDC_STATIC,109,280,15,8
    LTEXT           "[um]",IDC_STATIC,109,294,16,8
    LTEXT           "[ea]",IDC_STATIC,226,318,14,8
    LTEXT           "[mm]",IDC_STATIC,226,280,18,8
    LTEXT           "[mm]",IDC_STATIC,226,294,18,8
    LTEXT           "[ea]",IDC_STATIC,109,84,14,8
    LTEXT           "[ea]",IDC_STATIC,373,97,14,8
    RTEXT           "ModuleCount :",IDC_STATIC,20,131,46,8
    RTEXT           "ModuleCount :",IDC_STATIC,20,117,46,8
    CTEXT           "Module1 Panel",IDC_STATIC,62,163,46,8
    GROUPBOX        "Panel Motor Position",IDC_STATIC,22,148,218,94
    CTEXT           "1",IDC_STATIC,34,186,8,8
@@ -745,6 +840,17 @@
    CTEXT           "2",IDC_STATIC,284,200,8,8
    CTEXT           "3",IDC_STATIC,34,219,8,8
    CTEXT           "3",IDC_STATIC,141,219,8,8
    CONTROL         "Use Skip Mode",IDC_CHECK_SELF_DIAGNOSIS_FLATNESS_SKIP,
                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,66,260,62,10
    LTEXT           "Left Standard :",IDC_STATIC,17,133,49,9
    LTEXT           "Standard :",IDC_STATIC,296,135,33,9
    EDITTEXT        IDC_EDIT_SQUARENESS_STANDARD,67,130,40,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_WSI_STANDARD,330,132,40,14,ES_AUTOHSCROLL
    RTEXT           "[nm]",IDC_STATIC,372,134,16,8
    RTEXT           "[°]",IDC_STATIC,108,133,10,8
    LTEXT           "Right Standard :",IDC_STATIC,131,132,53,9
    EDITTEXT        IDC_EDIT_SQUARENESS_STANDARD2,183,130,40,14,ES_AUTOHSCROLL
    RTEXT           "[°]",IDC_STATIC,226,132,10,8
END
IDD_DLG_TAB_DEFECT_INFO DIALOGEX 0, 0, 539, 282
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -8713,14 +8713,22 @@
    break;
    case PCControlRecv_Autodiagnosis:
    {
        m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Signal] Diagno start => %d"), bSignalOn);
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
        CSignalControl* pSignalControl = m_pSP2P->ISP2P_GetSignalControl();
        CString strDiagnosisMode;
        pSignalControl->ReadData(_T("11160"), 2, strDiagnosisMode);
        int nDiagnosisMode = atoi(strDiagnosisMode);
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
        m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Signal] Diagno start => %d, DiagnosisMode => %d"), bSignalOn, nDiagnosisMode);
        if (bSignalOn) {
            bResult = SendSignalToSignalControl(PCControlSendSignalIndex_DiagnoAck, 0);
            
            m_pSP2P->ISP2P_GetDlgDiagnosis()->ShowWindow(SW_SHOW);
            
            m_pSP2P->ISP2P_GetDiagnosisManager()->RecvSignalToSignalControl(0, 0);
            m_pSP2P->ISP2P_GetDiagnosisManager()->RecvSignalToSignalControl(0, nDiagnosisMode);
        }
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
        else
            bResult = SendSignalOffToSignalControl(PCControlSendSignalIndex_DiagnoAck, 0);
ReviewSystem/ReviewSystem/resource.h
@@ -87,6 +87,7 @@
#define IDC_BUTTON_UI_LEFT              1004
#define IDC_CHECK_OFFSET_MODE           1004
#define IDC_IMAGE_ROTATION              1004
#define IDC_CHECK_SELF_DIAGNOSIS_FLATNESS_SKIP 1004
#define IDC_SLIDER1                     1005
#define IDC_SLIDER_LIGHT_LEVEL          1005
#define IDC_RADIO_MAP_TYPE_0            1005
@@ -251,31 +252,45 @@
#define IDC_EDIT4                       1088
#define IDC_EDIT_PANEL_COUNT_SQUARENESS 1089
#define IDC_EDIT_SCAN_COUNT             1089
#define IDC_EDIT_WSI_HEIGHT4            1089
#define IDC_BUTTON_GLASS_GO_XY          1090
#define IDC_EDIT_REVIEW_CAMCOUNT        1090
#define IDC_EDIT_WSI_HEIGHT5            1090
#define IDC_BUTTON_TEST1                1091
#define IDC_KEY_JOD_MOVE                1091
#define IDC_EDIT_JUDGE_DATA_Z_RANGE     1091
#define IDC_EDIT16                      1091
#define IDC_EDIT_SETTINGFILE_PATH       1091
#define IDC_EDIT_WSI_HEIGHT6            1091
#define IDC_BUTTON_GLASS_GO_XY3         1092
#define IDC_BUTTON_TEST2                1092
#define IDC_EDIT_XPOS_COUNT             1092
#define IDC_EDIT_WSI_HEIGHT7            1092
#define IDC_CHECK_AFM_TRACK             1093
#define IDC_EDIT_RANGE_COUNT_FLATNESS   1093
#define IDC_EDIT_WSI_HEIGHT8            1093
#define IDC_BUTTON_GLASS_GO_XY2         1094
#define IDC_BUTTON_GLASSCENTER_GO_XY    1094
#define IDC_EDIT_GLASS_SIZE_X           1094
#define IDC_EDIT_WSI_HEIGHT9            1094
#define IDC_EDIT_GLASS_SIZE_Y           1095
#define IDC_EDIT_WSI_HEIGHT10           1095
#define IDC_EDIT_PANEL_COUNT_WSI        1096
#define IDC_EDIT_WSI_HEIGHT14           1096
#define IDC_EDIT_JUDGE_DATA_3SIGMA      1097
#define IDC_EDIT_WSI_HEIGHT15           1097
#define IDC_EDIT_WSI_PANEL_POS_X        1098
#define IDC_EDIT_WSI_HEIGHT16           1098
#define IDC_EDIT_WSI_PANEL_POS_Y        1099
#define IDC_EDIT_WSI_HEIGHT17           1099
#define IDC_STATIC_JOG_SPEED            1100
#define IDC_EDIT_WSI_PANEL_POS_X2       1100
#define IDC_EDIT_WSI_HEIGHT18           1100
#define IDC_STATIC_LIGHT_LEVEL          1101
#define IDC_EDIT_WSI_PANEL_POS_Y2       1101
#define IDC_EDIT_WSI_HEIGHT19           1101
#define IDC_EDIT_REVIEW_PANEL_POS_X     1102
#define IDC_EDIT_WSI_HEIGHT20           1102
#define IDC_EDIT_REVIEW_PANEL_POS_Y     1103
#define IDC_RADIO_ZOOM_LEVEL_4          1104
#define IDC_EDIT_REVIEW_PANEL_POS_X2    1104
@@ -352,6 +367,7 @@
#define IDC_EDIT_GANTRY_THETA           1142
#define IDC_GRID_GANTRY_DATA_HISTORY    1143
#define IDC_EDIT_MODULE_COUNT           1144
#define IDC_EDIT_GANTRY_THETA2          1144
#define IDC_EDIT_GANTRY_MOTOR_X         1145
#define IDC_GRID_WSI_RESULT_DATA        1145
#define IDC_EDIT_GANTRY_MOTOR_Y         1146
@@ -376,20 +392,44 @@
#define IDC_EDIT_GANTRY_PIXEL_Y3        1156
#define IDC_EDIT_CHANGE_TARGET_XPOS     1156
#define IDC_EDIT_CHANGE_TARGET_YPOS     1157
#define IDC_EDIT_GANTRY_MOTOR_X4        1157
#define IDC_BUTTON5                     1158
#define IDC_EDIT_GANTRY_MOTOR_Y4        1158
#define IDC_EDIT_OFFSET_Y_VALUE         1159
#define IDC_EDIT_GANTRY_PIXEL_X4        1159
#define IDC_EDIT_CAMERA_COUNT           1160
#define IDC_EDIT_GANTRY_PIXEL_Y4        1160
#define IDC_PROGRESS_PROCESS            1161
#define IDC_EDIT_GANTRY_MOTOR_X5        1161
#define IDC_EDIT_MOTOR_XPOS             1162
#define IDC_EDIT_GANTRY_MOTOR_Y5        1162
#define IDC_EDIT_MOTOR_YPOS             1163
#define IDC_EDIT_GANTRY_PIXEL_X5        1163
#define IDC_BUTTON6                     1164
#define IDC_EDIT_GANTRY_PIXEL_Y5        1164
#define IDC_TAB_HISTORY_CONTROL         1165
#define IDC_EDIT_GANTRY_MOTOR_X6        1165
#define IDC_LIST_HISTORY_DEFECT         1166
#define IDC_EDIT_GANTRY_MOTOR_Y6        1166
#define IDC_EDIT_GANTRY_PIXEL_X6        1167
#define IDC_STATIC_MAP                  1168
#define IDC_EDIT_GANTRY_PIXEL_Y6        1168
#define IDC_GRID_ALIGN_ORIGIN_INFO      1170
#define IDC_GRID_ALIGN_HISTORY_INFO     1171
#define IDC_ALIGN_GRID_ORIGIN_INFO      1173
#define IDC_ALIGN_GRID_ALIGN_INFO       1174
#define IDC_EDIT_SQUARENESS_STANDARD    1175
#define IDC_EDIT_WSI_STANDARD           1176
#define IDC_EDIT_SQUARENESS_FIRSTSETTING 1176
#define IDC_EDIT_WSI_FIRST_STANDARD     1177
#define IDC_EDIT_SQUARENESS_STANDARD2   1177
#define IDC_EDIT_SQUARENESS_FIRSTSETTING2 1177
#define IDC_EDIT_WSI_HEIGHT1            1178
#define IDC_EDIT_WSI_HEIGHT2            1179
#define IDC_EDIT_WSI_HEIGHT3            1180
#define IDC_EDIT_WSI_HEIGHT11           1181
#define IDC_EDIT_WSI_HEIGHT12           1182
#define IDC_EDIT_WSI_HEIGHT13           1183
#define ID_INS_HOOK                     32772
#define ID_UNINS_HOOK                   32773
@@ -399,7 +439,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        381
#define _APS_NEXT_COMMAND_VALUE         32775
#define _APS_NEXT_CONTROL_VALUE         1175
#define _APS_NEXT_CONTROL_VALUE         1181
#define _APS_NEXT_SYMED_VALUE           346
#endif
#endif
ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisInfo.h
@@ -22,8 +22,9 @@
enum DiagnosisMode {
    DiagnosisMode_All = 0,
    DiagnosisMode_Squareness,
    DiagnosisMode_Review,
    DiagnosisMode_Wsi,
    DiagnosisMode_Squareness,
    DiagnosisMode_Flatness,
    DiagnosisMode_Flatness_Manual,
    DiagnosisMode_Simulation
@@ -63,6 +64,8 @@
    virtual BOOL IDP2P_SetDlgFlatness(int nIndex) = 0;
    virtual BOOL IDP2P_SetDialogTap(int nIndex) = 0;
    virtual void IDP2P_UpdateDialog(int nIndex = -1) = 0;
    virtual BOOL IDP2P_CheckManualMode() = 0;
};
struct SPositionData
@@ -129,6 +132,7 @@
    void            SetHeight3Sigma(double dData)            { m_dHeight3Sigma = dData; }
    void            SetACC(double dData) { m_dACC = dData; }
    void            SetRTB(double dData) { m_dRTB = dData; }
    void            SetDiagnosisHeight(double dData, int idx) { m_dDiagnosisHeight[idx] = dData; }
    // getter
    int                        GetModuleIndex() const { return m_nModuleIndex; }
@@ -148,6 +152,8 @@
    double                    GetHeight3Sigma() const { return m_dHeight3Sigma; }
    double                    getWSI_ACC() const {return m_dACC;}
    double                    getWSI_RTB() const { return m_dRTB; }
    double                    GetDiagnosisHeight(int idx) const { return m_dDiagnosisHeight[idx];  }
protected:
    int                m_nModuleIndex;
@@ -167,6 +173,7 @@
    double            m_dHeight3Sigma;
    double            m_dACC;
    double          m_dRTB;
    double            m_dDiagnosisHeight[10];
};
typedef std::vector<CDiagnosisResult>                VectorDiagnosisResult;
typedef std::vector<CDiagnosisResult>::iterator        VectorDiagnosisResultIt;
@@ -188,6 +195,7 @@
        m_dCameraResolution = 0.;
        m_nPanelCount_Squareness = 0;
        m_dJudgeData_Degree = 0.;
        m_dSquarenessStandard = 0.;
        m_dataSettingResult_Flatness.Reset();
        m_nAFDelay = 0;
@@ -199,6 +207,7 @@
        m_vecSettingResult_Wsi.clear();
        m_nPanelCount_Wsi = 0;
        m_dJudgeData_3Sigma = 0.;
        m_dWSIStandard = 0.;
        m_dPanelPosX = 0;
        m_dPanelPosY = 0;
@@ -215,6 +224,9 @@
        m_dReviewPanelPosY2 = 0;
        m_dReviewPanelPosX4 = 0;
        m_dReviewPanelPosY4 = 0;
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
        m_nFlatnessSkipMode = 0;
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    }
@@ -237,10 +249,16 @@
    void                    SetPanelCount_Wsi(int nCount) { m_nPanelCount_Wsi = nCount; }
    void                    SetJudgeData_3Sigma(double dData) { m_dJudgeData_3Sigma = dData; }
    void                    GetPanelPosX_Wsi(double dData) { m_dPanelPosX = dData; }
    void                    GetPanelPosY_Wsi(double dData) {  m_dPanelPosY = dData; }
    void                    GetPanelPosX2_Wsi(double dData) { m_dPanelPosX2 = dData; }
    void                    GetPanelPosY2_Wsi(double dData) { m_dPanelPosY2 = dData; }
    void                    SetPanelPosX_Wsi(double dData) { m_dPanelPosX = dData; }
    void                    SetPanelPosY_Wsi(double dData) {  m_dPanelPosY = dData; }
    void                    SetPanelPosX2_Wsi(double dData) { m_dPanelPosX2 = dData; }
    void                    SetPanelPosY2_Wsi(double dData) { m_dPanelPosY2 = dData; }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    void                    SetFlastnessSkipMode(double dData) { m_nFlatnessSkipMode = dData; }
    void                    SetSquarenessStandard(double dData) { m_dSquarenessStandard = dData; }
    void                    SetSquarenessStandard2(double dData) { m_dSquarenessStandard2 = dData; }
    void                    SetWSIStandard(double dData) { m_dWSIStandard = dData; }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    // getter
@@ -272,6 +290,12 @@
    double                    GetPanelPosY_Wsi() const { return m_dPanelPosY; }
    double                    GetPanelPosX2_Wsi() const { return m_dPanelPosX2; }
    double                    GetPanelPosY2_Wsi() const { return m_dPanelPosY2; }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    int                        GetFlastnessSkipMode() const { return m_nFlatnessSkipMode; }
    double                    GetSquarenessStandard() const { return m_dSquarenessStandard; }
    double                    GetSquarenessStandard2() const { return m_dSquarenessStandard2; }
    double                    GetWSIStandard() const { return m_dWSIStandard; }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    //Review
public:
    double                    GetReviewPanelPosX() const { return m_dReviewPanelPosX; }
@@ -300,6 +324,10 @@
    int                            m_nCameraFrameHeight;
    double                        m_dCameraResolution;
    double                        m_dJudgeData_Degree;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    double                        m_dSquarenessStandard;
    double                        m_dSquarenessStandard2;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    // Flatness
    CDiagnosisResult            m_dataSettingResult_Flatness;        // single data
@@ -309,11 +337,17 @@
    int                            m_nRangeCount_Flatness;
    int                            m_nGlassSizeX;
    int                            m_nGlassSizeY;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    int                            m_nFlatnessSkipMode;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    // wsi
    VectorDiagnosisResult        m_vecSettingResult_Wsi;        // add module count
    int                            m_nPanelCount_Wsi;
    double                        m_dJudgeData_3Sigma;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    double                        m_dWSIStandard;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    double                        m_dPanelPosX;
    double                        m_dPanelPosY;
ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisManager.h
@@ -40,6 +40,8 @@
    BOOL MakeDirectory(CString strPath);
    BOOL CheckManualMode();
    // setter
    void SetExistStandardData(BOOL bExist = TRUE) { m_bExistStandardData = bExist; }
    int SetDiagnosisResultCount_Squareness(int nCount);
ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisProcessor.h
@@ -49,6 +49,7 @@
    int ProcessFlatness();
    int ProcessFlatness_Manual();
    int ProcessSimulation();
    int ProcessDiagnosisJudge();
    BOOL CalculateSquareness(int nIndex);
protected: