SDC C-Project CF Review 프로그램
32개 파일 변경됨
802 ■■■■■ 파일 변경됨
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp 70 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/bin/ReviewHistroy.exe 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/CHReviewResult/GlassResult.cpp 8 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/M_AutoDiagnosisManager/DiagnosisInfo.cpp 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp 53 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewRecipeEditor/ReviewRecipeEditorDlg.cpp 156 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewRecipeEditor/stdafx.h 49 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/CameraControlAlign.cpp 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/CameraControlReview.cpp 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/CameraController.cpp 14 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgControl.cpp 28 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgControl.h 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.h 6 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Flatness.cpp 8 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.cpp 24 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.cpp 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/FileUploadControl.cpp 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/MainFrm.cpp 6 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.cpp 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.h 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp 98 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewSystem.rc 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor.h 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 35 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/resource.h 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/stdafx.h 32 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystemSetting/ReviewSystemSettingDlg.cpp 77 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystemSetting/stdafx.h 39 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/CHReviewRecipe/RsRcpAlignInfo.h 8 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisInfo.h 29 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
@@ -279,7 +279,15 @@
//             // 그림을 Picture Control 크기로 화면에 출력한다.
//             m_ReviewImage.Draw(dc, m_picture_rect);
//         }
        if (!m_DefectImage.IsNull())
        //LYW 20210825 #3486 ADD START
        if (!m_DefectRotateImage.IsNull())
        {
            dc.SetStretchBltMode(COLORONCOLOR);
            // 그림을 Picture Control 크기로 화면에 출력한다.
            m_DefectRotateImage.Draw(dc, m_picture_rect2);
        }
        //LYW 20210825 #3486 ADD END
        else if (!m_DefectImage.IsNull())
        {
            dc.SetStretchBltMode(COLORONCOLOR);
            // 그림을 Picture Control 크기로 화면에 출력한다.
@@ -1968,6 +1976,9 @@
    m_DefectImage.Destroy();
    m_ReviewImage.Destroy();
    //LYW 20210825 #3486 ADD START
    m_DefectRotateImage.Destroy();
    //LYW 20210825 #3486 ADD END
    m_AlignFirst.Destroy();
    m_AlignSecend.Destroy();
@@ -2055,7 +2066,7 @@
    DeftectPath.Format(_T("%s\\%s\\%s"), strReviewPath, strReviewImagePath, strReviewImageName);
    //DeftectPath2.Format(_T("%s\\%s"), strInspectorPath, strInspectorName);
    if (strInspectorName == "*" || strInspectorName == "**" || strInspectorName == "***") strInspectorName = "";
    DeftectPath2.Format(_T("%s\\%s\\%s"), strInspectorPath, pImageInfo->m_strGlassID, strReviewImageName);
    DeftectPath2.Format(_T("%s\\%s\\%s"), strInspectorPath, pImageInfo->m_strGlassID, strInspectorName);
    AlignPath.Format(_T("%s\\%s\\%s"), strAlignPath, pImageInfo->m_strGlassID, strAlignName);
    AlignPath2.Format(_T("%s\\%s\\%s"), strAlignPath, pImageInfo->m_strGlassID, strAlignName2);
@@ -2096,13 +2107,21 @@
    if (CFile::GetStatus(DeftectPath2, FileOn) && strInspectorName != "") //파일이 있을 때
    {
        m_DefectImage.Load(DeftectPath2);
        //LYW 20210825 #3486 ADD START
        m_DefectRotateImage.Create(m_DefectImage.GetWidth(), m_DefectImage.GetHeight(), m_DefectImage.GetBPP(), 0);
        ImageRotate(m_DefectImage, m_DefectRotateImage);
        //LYW 20210825 #3486 ADD END
        HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), DeftectPath2,
            IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
        InvalidateRect(m_picture_rect2, FALSE);
        dc.SetStretchBltMode(COLORONCOLOR);
        m_DefectImage.Draw(dc, m_picture_rect2);
        //LYW 20210825 #3486 MOD START
        m_DefectRotateImage.Draw(dc, m_picture_rect2);
        //LYW 20210825 #3486 MOD END
        //original
        //m_DefectImage.Draw(dc, m_picture_rect2);
    }
    else
    {
@@ -2490,6 +2509,9 @@
//    m_ReviewImage.Destroy();
    m_DefectImage.Destroy();
    //LYW 20210825 #3486 ADD START
    m_DefectRotateImage.Destroy();
    //LYW 20210825 #3486 ADD END
    m_AlignFirst.Destroy();
    m_AlignSecend.Destroy();
@@ -2527,6 +2549,48 @@
    m_AlignSecend.Draw(dc, m_Align_rect2);
}
//LYW 20210825 #3486 ADD START
void CReveiwHistoryDlg::ImageRotate(CImage & SrcImage, CImage & DstImage, double degree/* = 180.0 */)
{
    int Height = SrcImage.GetHeight(); // 세로 길이 저장
    int Width = SrcImage.GetWidth(); // 가로 길이 저장
    int new_x, new_y;
    int R, G, B;
    int center_x = (SrcImage.GetWidth() / 2); // 회전 중심점
    int center_y = (SrcImage.GetHeight() / 2); // 회전 중심점
    double seta = 3.14 / (180.0 / degree); // 라디안
    double CosSeta = cos(seta);
    double SinSeta = sin(seta);
    for (int y = 0; y < Height; y++)
    {
        for (int x = 0; x < Width; x++)
        {
            new_x = (int)((x - center_x) * CosSeta - (y - center_y) * SinSeta + center_x);
            new_y = (int)((x - center_x) * SinSeta + (y - center_y) * CosSeta + center_y);
            if ((new_x < 0) || (new_x > Width) || (new_y < 0) || (new_y > Height))
                //이미지 범위를 벗어나면 0 값
            {
                R = 0;
                G = 0;
                B = 0;
            }
            else
            {
                R = GetRValue(SrcImage.GetPixel(new_x, new_y));
                G = GetGValue(SrcImage.GetPixel(new_x, new_y));
                B = GetBValue(SrcImage.GetPixel(new_x, new_y));
            }
            DstImage.SetPixel((int)x, (int)y, RGB(R, G, B));
            new_x = 0; new_y = 0;
        }
    }
}
//LYW 20210825 #3486 ADD END
void CReveiwHistoryDlg::OnChangeEditFileCount()
{
    // TODO:  RICHEDIT 컨트롤인 경우, 이 컨트롤은
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h
@@ -83,6 +83,9 @@
    std::vector<_akDefect> m_vectest;
    CImage m_DefectImage;
    //LYW 20210825 #3486 ADD START
    CImage m_DefectRotateImage;
    //LYW 20210825 #3486 ADD END
    CImage m_ReviewImage;
    CRect m_picture_rect;
@@ -240,6 +243,10 @@
    void Imagenoload();
    //LYW 20210825 #3486 ADD START
    void ImageRotate(CImage& SrcImage, CImage& DstImage, double degree = 180.0);
    //LYW 20210825 #3486 ADD END
    BOOL GetCheckFileLoad(int nCount);
    void GlassInfoRest();
ReviewHistory/bin/ReviewHistroy.exe
Binary files differ
ReviewSystem/CHReviewResult/GlassResult.cpp
@@ -161,8 +161,8 @@
    //FDC보고용 Review Contrast
    //#3524_210723_LYW_CF AOI Review 디포커스 알람 추가 및 FDC 보고 방식 개선 MOD Start
    nReview00ImageContrast = 50;
    nReview01ImageContrast = 50;
    nReview00ImageContrast = 5;
    nReview01ImageContrast = 5;
    //#3524_210723_LYW_CF AOI Review 디포커스 알람 추가 및 FDC 보고 방식 개선 MOD End
    // defect result
@@ -312,8 +312,8 @@
    //FDC보고용 Review Contrast
    //#3524_210723_LYW_CF AOI Review 디포커스 알람 추가 및 FDC 보고 방식 개선 MOD Start
    nReview00ImageContrast = 50;
    nReview01ImageContrast = 50;
    nReview00ImageContrast = 5;
    nReview01ImageContrast = 5;
    //#3524_210723_LYW_CF AOI Review 디포커스 알람 추가 및 FDC 보고 방식 개선 MOD End
    //// defect result
    //for (MapDefectResultIt it = m_mapDefectResult.begin(); it != m_mapDefectResult.end(); it++)
ReviewSystem/M_AutoDiagnosisManager/DiagnosisInfo.cpp
@@ -19,12 +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
    /*< LYW 20210719 : #3517 ADD 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
    /*< LYW 20210719 : #3517 ADD 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/DiagnosisProcessor.cpp
@@ -62,7 +62,7 @@
        m_pManager->m_bProcessAll = true;
        ProcessAll();
        break;
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
        /*< LYW 20210719 : #3517 ADD Start >*/
    case DiagnosisMode_Review :
        strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisMode_Review START"));
        m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
@@ -116,7 +116,7 @@
            m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        }
        break;
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
        /*< LYW 20210719 : #3517 ADD End >*/
    case DiagnosisMode_Flatness:
        m_pManager->m_bProcessAll = false;
        ProcessFlatness();
@@ -167,7 +167,7 @@
    m_pDP2P->IDP2P_SetDialogTap(1);
    ProcessFlatness();
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    /*< LYW 20210719 : #3517 ADD Start >*/
    //Sleep(2000);
    Sleep(1000);
@@ -175,7 +175,7 @@
        strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
        m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
    }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    /*< LYW 20210719 : #3517 ADD Start >*/
    m_pManager->m_bProcessAll = false;
@@ -300,10 +300,10 @@
        int stTime = GetTickCount();
        while (1)
        {
            //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
            /*< LYW 20210719 : #3517 ADD Start >*/
            //if (11000 <= GetTickCount() - stTime)
            //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
            if (1000 <= GetTickCount() - stTime)
            /*< LYW 20210719 : #3517 ADD End >*/
            if (1500 <= GetTickCount() - stTime)
            {
                break;
            }
@@ -311,10 +311,10 @@
        }
        m_pDP2P->IDP2P_SetAFMTracking(nSelModuleIndex, TRUE);
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
        /*< LYW 20210719 : #3517 ADD Start >*/
        //Sleep(1000);
        Sleep(500);
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
        Sleep(1000);
        /*< LYW 20210719 : #3517 ADD End >*/
        CString strimagename;
        strimagename.Format(_T("%s_Module[%d]Index[%d].bmp"), m_pManager->m_strResultImageFileName, nSelModuleIndex, nIdx);
@@ -462,10 +462,10 @@
        }
        m_pDP2P->IDP2P_SetWsiManualMeasure(nSelModuleIndex, dXpos, dYpos);
        // move panel
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
        /*< LYW 20210719 : #3517 ADD Start >*/
        //Sleep(2000);
        Sleep(1000);
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
        /*< LYW 20210719 : #3517 ADD End >*/
        m_pDP2P->IDP2P_MotorGo(nSelModuleIndex, dXpos, dYpos);
        if (m_pDP2P->IDP2P_IsGantryMotionEnd(nSelModuleIndex) == FALSE)
@@ -477,10 +477,10 @@
        int stTime = GetTickCount();
        while (1)
        {
            //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
            /*< LYW 20210719 : #3517 ADD Start >*/
            //if (10000 <= GetTickCount() - stTime)
            if (11000 <= GetTickCount() - stTime)
            //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
            /*< LYW 20210719 : #3517 ADD End >*/
            {
                break;
            }
@@ -545,14 +545,14 @@
    CDiagnosisInfo * pSettingInfo = m_pManager->GetDiagnosisInfo();
    if (pSettingInfo == NULL) return 0;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    /*< LYW 20210719 : #3517 ADD Start >*/
    if (pSettingInfo->GetFlastnessSkipMode() == TRUE) {
        strMessage.Format(_T("[CDiagnosisProcessor] FlastnessSkipMode!"));
        m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        return 0;
    }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    /*< LYW 20210719 : #3517 ADD End >*/
    int nSelModuleIndex = m_pDP2P->IDP2P_GetSelectedModuleIndex();
    int nFlatnessMode = pSettingInfo->GetFlatnessMode();
@@ -593,10 +593,10 @@
        {
            // AF Home
            m_pDP2P->IDP2P_AFMHomePosition(0);
            //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
            /*< LYW 20210719 : #3517 ADD Start >*/
            //Sleep(5000);
            Sleep(1000);
            //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
            /*< LYW 20210719 : #3517 ADD End >*/
            m_pDP2P->IDP2P_SetAFMTracking(0, TRUE);
            Sleep(500);
        }
@@ -888,8 +888,21 @@
        for (int nIdx = 0; nIdx < nPanelCount; nIdx++)
        {
            const SPositionData* pSettingPos = pSettingResult->GetPositionData_Squareness(nIdx);
            const SPositionData* pDataPos = pProcessResult->GetPositionData_Squareness(nIdx);
            //LYW 210811
            const SPositionData* pSettingPos;
            const SPositionData* pDataPos;
            if (nSelModuleIndex == 1)
            {
                pSettingPos = pSettingResult->GetPositionData_Squareness(nIdx);
                pDataPos = pProcessResult->GetPositionData_Squareness(nIdx + 3);
            }
            else
            {
                pSettingPos = pSettingResult->GetPositionData_Squareness(nIdx);
                pDataPos = pProcessResult->GetPositionData_Squareness(nIdx);
            }
            //LYW 210811
            if (pSettingPos == NULL || pDataPos == NULL) continue;
            dMotorPosX[nIdx] = pSettingPos->dPosX;
ReviewSystem/ReviewRecipeEditor/ReviewRecipeEditorDlg.cpp
@@ -1,5 +1,5 @@
// ReviewRecipeEditorDlg.cpp : 구현 파일
// ReviewRecipeEditorDlg.cpp : ���� ����
//
#include "stdafx.h"
@@ -17,7 +17,7 @@
#endif
// CReviewRecipeEditorDlg 대화 상자
// CReviewRecipeEditorDlg ��ȭ ����
CReviewRecipeEditorDlg::CReviewRecipeEditorDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CReviewRecipeEditorDlg::IDD, pParent)
@@ -162,18 +162,18 @@
END_MESSAGE_MAP()
// CReviewRecipeEditorDlg 메시지 처리기
// CReviewRecipeEditorDlg �޽��� ó����
BOOL CReviewRecipeEditorDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    // 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
    //  프레임워크가 이 작업을 자동으로 수행합니다.
    SetIcon(m_hIcon, TRUE);            // 큰 아이콘을 설정합니다.
    SetIcon(m_hIcon, FALSE);        // 작은 아이콘을 설정합니다.
    // �� ��ȭ ������ �������� �����մϴ�. ���� ���α׷��� �� â�� ��ȭ ���ڰ� �ƴ� ��쿡��
    //  �����ӿ�ũ�� �� �۾��� �ڵ����� �����մϴ�.
    SetIcon(m_hIcon, TRUE);            // ū �������� �����մϴ�.
    SetIcon(m_hIcon, FALSE);        // ���� �������� �����մϴ�.
    // TODO: 여기에 추가 초기화 작업을 추가합니다.
    // TODO: ���⿡ �߰� �ʱ�ȭ �۾��� �߰��մϴ�.
    //m_bReviewSystemPC = IsReviewSystemPC();
    m_bReviewSystemPC = TRUE;
    pReviewRecipeEditor = this;
@@ -189,29 +189,29 @@
    InitRecipeListGridControl();
    RefreshRecipeList();
    return TRUE;  // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
    return TRUE;  // ��Ŀ���� ��Ʈ�ѿ� �������� ������ TRUE�� ��ȯ�մϴ�.
}
// 대화 상자에 최소화 단추를 추가할 경우 아이콘을 그리려면
//  아래 코드가 필요합니다. 문서/뷰 모델을 사용하는 MFC 응용 프로그램의 경우에는
//  프레임워크에서 이 작업을 자동으로 수행합니다.
// ��ȭ ���ڿ� �ּ�ȭ ���߸� �߰��� ��� �������� �׸�����
//  �Ʒ� �ڵ尡 �ʿ��մϴ�. ����/�� ���� ����ϴ� MFC ���� ���α׷��� ��쿡��
//  �����ӿ�ũ���� �� �۾��� �ڵ����� �����մϴ�.
void CReviewRecipeEditorDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트
        CPaintDC dc(this); // �׸��⸦ ���� ����̽� ���ؽ�Ʈ
        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
        // 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다.
        // Ŭ���̾�Ʈ �簢������ �������� ����� ����ϴ�.
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;    
        // 아이콘을 그립니다.
        // �������� �׸��ϴ�.
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
@@ -220,8 +220,8 @@
    }
}
// 사용자가 최소화된 창을 끄는 동안에 커서가 표시되도록 시스템에서
//  이 함수를 호출합니다.
// ����ڰ� �ּ�ȭ�� â�� ��� ���ȿ� Ŀ���� ǥ�õǵ��� �ý��ۿ���
//  �� �Լ��� ȣ���մϴ�.
HCURSOR CReviewRecipeEditorDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
@@ -230,7 +230,7 @@
void CReviewRecipeEditorDlg::OnBnClickedButtonReviewRcpEditorCreate()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    BOOL bUseRecipeInfo = FALSE;
    int nIdx;
    CString strRecipeName, strNewRecipeName, strMessage;
@@ -240,7 +240,7 @@
    if(cellID.row > 0 && cellID.col > 0)
    {
        strRecipeName = m_ctrlGridRecipeList.GetItemText(cellID.row, 1);
        strMessage.Format(_T("Do you want to create new recipe using %s recipe information?"), strRecipeName);//_T("%s 레시피 정보를 이용하여 생성하시겠습니까?"), strRecipeName);
        strMessage.Format(_T("Do you want to create new recipe using %s recipe information?"), strRecipeName);//_T("%s ������ ������ �̿��Ͽ� �����Ͻðڽ��ϱ�?"), strRecipeName);
        //if (IDYES == AfxMessageBox(strMessage, MB_YESNO | MB_ICONQUESTION))
        //{
@@ -268,11 +268,11 @@
        if(nIdx != -1)
        {
            strTemp = strTemp.Mid(nIdx + 1);
            strNewPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
            strNewPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp); //210805
        }
        else
        {
            strNewPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strNewRecipeName);
            strNewPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strNewRecipeName);  //210805
        }
    }
@@ -290,22 +290,22 @@
            if(nIdx != -1)
            {
                strTemp = strTemp.Mid(nIdx + 1);
                strSrcPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
                strSrcPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp); //210805
            }
            else
            {
                strSrcPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);
                strSrcPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);  //210805
            }
        }
            
        if(CopyFile(strSrcPath, strNewPath, FALSE) == FALSE)
        {
            strMessage.Format(_T("Fail to create %s recipe"));//_T("%s 레시피 생성 실패!"));
            strMessage.Format(_T("Fail to create %s recipe"));//_T("%s ������ ���� ����!"));
            AfxMessageBox(strMessage);
        }
        else
        {
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD START
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD START
            CString strBackupPath = _REVIEW_RECIPE_BACKUP_PATH_CPJT;
            CreateDirectory(strBackupPath, NULL);
@@ -316,9 +316,9 @@
            strSource.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, strNewRecipeName);
            strDest.Format(_T("%s\\%s.rcp"), strBackupPath, strNewRecipeName);
            CopyFile(strSource, strDest, TRUE);
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD END
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD END
            // [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
            // [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
            COPYDATA_RECIPE2REV copyData;
            copyData.Message = MsgRecipe2Rev_RecipeCreate;
            copyData.nPPID = _ttoi(strNewRecipeName);
@@ -331,12 +331,12 @@
        if(file.Open(strNewPath, CFile::modeCreate | CFile::modeWrite) == FALSE)
        {
            strMessage.Format(_T("Fail to create %s recipe"));//_T("%s 레시피 생성 실패!"));
            strMessage.Format(_T("Fail to create %s recipe"));//_T("%s ������ ���� ����!"));
            AfxMessageBox(strMessage);
        }
        else
        {
            strMessage.Format(_T("Please select the default file!"));//_T("먼저 기본 파일을 선택해주세요!"));
            strMessage.Format(_T("Please select the default file!"));//_T("���� �⺻ ������ �������ּ���!"));
            AfxMessageBox(strMessage);                
        }
@@ -368,7 +368,7 @@
void CReviewRecipeEditorDlg::OnBnClickedButtonReviewRcpEditorDelete()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    int nIdx;
    CString strRecipeName, strPath, strMessage, strTemp;
    CCellID cellID = m_ctrlGridRecipeList.GetFocusCell();
@@ -389,20 +389,20 @@
            if (nIdx != -1)
            {
                strTemp = strTemp.Mid(nIdx + 1);
                strPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
                strPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp); //210805
            }
            else
            {
                strPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);
                strPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName); //210805
            }
        }
        //_T("%s 레시피를 삭제하시겠습니까?"), strRecipeName);
        //_T("%s �����Ǹ� �����Ͻðڽ��ϱ�?"), strRecipeName);
        strMessage.Format(_T("Do you want to delete %s recipe?"), strRecipeName);
        if (IDYES == AfxMessageBox(strMessage, MB_YESNO | MB_ICONQUESTION))
        {
            // [2017:5:20]-[WEZASW] : 현재 적용된 Recipe(PPID)는 삭제 금지 요청.
            // [2017:5:20]-[WEZASW] : ���� ����� Recipe(PPID)�� ���� ���� ��û.
            if (strRecipeName.Compare(m_strCurrentRecipeName) == 0)
            {
                strMessage.Format(_T("Currently applied Recipe(%s) can not be deleted!"), strRecipeName);
@@ -411,16 +411,16 @@
            }
            DeleteFile(strPath);
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD START
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD START
            CString strBackupPath = _REVIEW_RECIPE_BACKUP_PATH_CPJT;
            CString strDest;
            strDest.Format(_T("%s\\%s.rcp"), strBackupPath, strRecipeName);
            DeleteFile(strDest);
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD END
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD END
            // [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
            // [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
            COPYDATA_RECIPE2REV copyData;
            copyData.Message = MsgRecipe2Rev_RecipeDelete;
            copyData.nPPID = _ttoi(strRecipeName);
@@ -429,7 +429,7 @@
    }
    else
    {
        AfxMessageBox(_T("Please select recipe."));//_T("레시피를 선택하세요."));
        AfxMessageBox(_T("Please select recipe."));//_T("�����Ǹ� �����ϼ���."));
    }
    RefreshRecipeList();
@@ -442,7 +442,7 @@
void CReviewRecipeEditorDlg::OnBnClickedButtonReviewRcpEditorLoad()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    BOOL bReturn;
    CString strRecipeName;
    CCellID cellID = m_ctrlGridRecipeList.GetFocusCell();
@@ -456,7 +456,7 @@
        {
            m_strCurrentRecipeName = strRecipeName;
            // [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
            // [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
            COPYDATA_RECIPE2REV copyData;
            copyData.Message = MsgRecipe2Rev_RecipeChange;
            copyData.nPPID = _ttoi(m_strCurrentRecipeName);
@@ -471,7 +471,7 @@
    }
    else
    {
        AfxMessageBox(_T("Please select recipe."));//_T("레시피를 선택하세요."));
        AfxMessageBox(_T("Please select recipe."));//_T("�����Ǹ� �����ϼ���."));
    }
}
@@ -517,7 +517,7 @@
        if (bRet)
        {
            // [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
            // [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
            COPYDATA_RECIPE2REV copyData;
            copyData.Message = MsgRecipe2Rev_RecipeModify;
            copyData.nPPID = _ttoi(RecipeName);
@@ -540,14 +540,14 @@
            strDest.Format(_T("%s\\%s_%s.rcp"), strBackupPath, RecipeName, strBackupFile);
            CopyFile(strSource, strDest, TRUE);
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD START
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD START
            strBackupPath = _REVIEW_RECIPE_BACKUP_PATH_CPJT;
            CreateDirectory(strBackupPath, NULL);
            strSource.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, RecipeName);
            strDest.Format(_T("%s\\%s.rcp"), strBackupPath, RecipeName);
            CopyFile(strSource, strDest, TRUE);
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD END
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD END
            strMessage.Format(_T("Complete to save %s recipe!"), RecipeName);
            //AfxMessageBox(strMessage);
@@ -567,7 +567,7 @@
void CReviewRecipeEditorDlg::OnBnClickedButtonReviewRcpEditorSave()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    CString strMessage;
    if (m_strCurrentRecipeName.IsEmpty())
@@ -584,7 +584,7 @@
        if (bRet)
        {
            // [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
            // [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
            COPYDATA_RECIPE2REV copyData;
            copyData.Message = MsgRecipe2Rev_RecipeModify;
            copyData.nPPID = _ttoi(m_strCurrentRecipeName);
@@ -607,14 +607,14 @@
            strDest.Format(_T("%s\\%s_%s.rcp"), strBackupPath, m_strCurrentRecipeName, strBackupFile);
            CopyFile(strSource, strDest, TRUE);
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD START
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD START
            strBackupPath = _REVIEW_RECIPE_BACKUP_PATH_CPJT;
            CreateDirectory(strBackupPath, NULL);
            strSource.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, m_strCurrentRecipeName);
            strDest.Format(_T("%s\\%s.rcp"), strBackupPath, m_strCurrentRecipeName);
            CopyFile(strSource, strDest, FALSE);
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD END
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD END
            strMessage.Format(_T("Complete to save %s recipe!"), m_strCurrentRecipeName);
            AfxMessageBox(strMessage);
@@ -641,7 +641,7 @@
void CReviewRecipeEditorDlg::OnBnClickedButtonReviewrcpEditorExit()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    DestroyWindow();
}
@@ -706,15 +706,15 @@
void CReviewRecipeEditorDlg::InitTabControl()
{
    int nIdx = 0;
    m_ctrlTabMain.InsertItem(nIdx++, _T("Common"));            //_T("  공통  "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Review"));            //_T("  리뷰  "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Common"));            //_T("  ����  "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Review"));            //_T("  ����  "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("WSI"));            //_T("  WSI  "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Align"));            //_T(" 얼라인 "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Judgement"));        //_T(" 판정  "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Align"));            //_T(" ����� "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Judgement"));        //_T(" ����  "));
    // 미사용으로 제외
//    m_ctrlTabMain.InsertItem(nIdx++, _T("Measure"));        //_T("  측정  "));
//    m_ctrlTabMain.InsertItem(nIdx++, _T("Finding Defect"));    //_T(" 결함찾기 "));
    // �̻������ ����
//    m_ctrlTabMain.InsertItem(nIdx++, _T("Measure"));        //_T("  ����  "));
//    m_ctrlTabMain.InsertItem(nIdx++, _T("Finding Defect"));    //_T(" ����ã�� "));
    //m_ctrlTabMain.InsertItem(nIdx++, _T("Glass"));            //_T(" Glass Info "));
}
@@ -750,19 +750,19 @@
    Item.mask = GVIF_TEXT;
    Item.row = nRowIdx;
    Item.col = nColIdx++;
    strTemp.Format(_T("Index"));//_T("인덱스"));
    strTemp.Format(_T("Index"));//_T("�ε���"));
    Item.strText = strTemp;
    m_ctrlGridRecipeList.SetItem(&Item);
    Item.row = nRowIdx;
    Item.col = nColIdx++;
    strTemp.Format(_T("Recipe Name"));//_T("레시피 이름"));
    strTemp.Format(_T("Recipe Name"));//_T("������ �̸�"));
    Item.strText = strTemp;
    m_ctrlGridRecipeList.SetItem(&Item);
    Item.row = nRowIdx;
    Item.col = nColIdx++;
    strTemp.Format(_T("Last Modified Date"));//_T("최종 수정 날짜"));
    strTemp.Format(_T("Last Modified Date"));//_T("���� ���� ��¥"));
    Item.strText = strTemp;
    m_ctrlGridRecipeList.SetItem(&Item);
}
@@ -787,7 +787,7 @@
        for(i = 0; i < nRecipeCount; i++)
        {
            //레시피 인덱스
            //������ �ε���
            nColIdx = 0;
            Item.mask = GVIF_TEXT;
            Item.row = nRowIdx;
@@ -796,13 +796,13 @@
            Item.strText = strTemp;
            m_ctrlGridRecipeList.SetItem(&Item);
            //레시피 이름
            //������ �̸�
            nColIdx++;
            strTemp = strArrayRecipeName.GetAt(i);
            m_ctrlGridRecipeList.SetItemText(nRowIdx, nColIdx, strTemp);
            m_ctrlGridRecipeList.SetItemState(nRowIdx, nColIdx, GVIS_READONLY);
            //최종 수정 날짜
            //���� ���� ��¥
            nColIdx++;
            strTemp = strArrayLastWriteTime.GetAt(i);
            m_ctrlGridRecipeList.SetItemText(nRowIdx, nColIdx, strTemp);
@@ -837,11 +837,11 @@
        if(nIdx != -1)
        {
            strTemp = strTemp.Mid(nIdx + 1);
            strSearchPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
            strSearchPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
        }
        else
        {
            strSearchPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\*.rcp"), NETIP_A2E_REVIEW_SYSTEM);
            strSearchPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\*.rcp"), NETIP_A2E_REVIEW_SYSTEM); //210805
        }
    }
@@ -902,12 +902,12 @@
        if(nIdx != -1)
        {
            strTemp = strTemp.Mid(nIdx + 1);
            strPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
            strPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
        }
        else
        {
            strPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);
        }
            strPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);//210805
        }
    }
    CMacroFile macroFile;
@@ -995,11 +995,11 @@
        if(nIdx != -1)
        {
            strTemp = strTemp.Mid(nIdx + 1);
            strPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
            strPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
        }
        else
        {
            strPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);
            strPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName); //210805
        }
    }
    
@@ -1069,11 +1069,11 @@
        if(nIdx != -1)
        {
            strTemp = strTemp.Mid(nIdx + 1);
            strPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
            strPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
        }
        else
        {
            strPath.Format(_T("\\\\%s\\C\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg"), NETIP_A2E_REVIEW_SYSTEM);
            strPath.Format(_T("\\\\%s\\D\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg"), NETIP_A2E_REVIEW_SYSTEM); //210805
        }
    }
@@ -1106,12 +1106,12 @@
void CReviewRecipeEditorDlg::OnTcnSelchangeTabReviewRcpEditorMainTab(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    RecipeMainTab nTabIdx;
    nTabIdx = (RecipeMainTab)m_ctrlTabMain.GetCurSel();
    // [2017:1:25]-[WEZASW] : SystemMachine_B7E_WSI 설비 분리(WSI 유/무)
    // [2017:1:25]-[WEZASW] : SystemMachine_B7E_WSI ���� �и�(WSI ��/��)
    switch(GetCurrentTapIndex(nTabIdx))
    {
    case COMMON_TAB:
@@ -1217,8 +1217,8 @@
}
void CReviewRecipeEditorDlg::OnCancel()
{
    // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
    //_T("레시피 에디터 프로그램을 종료하시겠습니까?"), MB_YESNO | MB_ICONQUESTION))
    // TODO: ���⿡ Ư��ȭ�� �ڵ带 �߰� ��/�Ǵ� �⺻ Ŭ������ ȣ���մϴ�.
    //_T("������ ������ ���α׷��� �����Ͻðڽ��ϱ�?"), MB_YESNO | MB_ICONQUESTION))
    if (IDNO == AfxMessageBox(_T("Do you want to exit recipe editor program?"), MB_YESNO | MB_ICONERROR))
    {
        return;
@@ -1344,7 +1344,7 @@
void CReviewRecipeEditorDlg::OnStnClickedStaticSelectRcipe()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
}
@@ -1447,7 +1447,7 @@
    }
    else
    {
        AfxMessageBox(_T("Please select recipe."));//_T("레시피를 선택하세요."));
        AfxMessageBox(_T("Please select recipe."));//_T("�����Ǹ� �����ϼ���."));
    }
    return bSuccess;
@@ -1457,7 +1457,7 @@
{
    BOOL bSuccess = TRUE;
    // 중복 Recipe 생성 금지.
    // �ߺ� Recipe ���� ����.
    CFileFind finder;
    CString strRecipeFile;
    strRecipeFile.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, strRecipeName);
ReviewSystem/ReviewRecipeEditor/stdafx.h
@@ -1,7 +1,7 @@
// stdafx.h : 자주 사용하지만 자주 변경되지는 않는
// 표준 시스템 포함 파일 및 프로젝트 관련 포함 파일이
// 들어 있는 포함 파일입니다.
// stdafx.h : ���� ��������� ���� ��������� �ʴ�
// ǥ�� �ý��� ���� ���� �� ������Ʈ ���� ���� ������
// ��� �ִ� ���� �����Դϴ�.
#pragma once
@@ -10,37 +10,42 @@
#endif
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN            // 거의 사용되지 않는 내용은 Windows 헤더에서 제외합니다.
#define VC_EXTRALEAN            // ���� ������ �ʴ� ������ Windows ������� �����մϴ�.
#endif
#include "targetver.h"
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 일부 CString 생성자는 명시적으로 선언됩니다.
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // �Ϻ� CString �����ڴ� ��������� ����˴ϴ�.
// MFC의 공통 부분과 무시 가능한 경고 메시지에 대한 숨기기를 해제합니다.
// MFC�� ���� �κа� ���� ������ ��� �޽����� ���� ����⸦ �����մϴ�.
#define _AFX_ALL_WARNINGS
#include <afxwin.h>         // MFC 핵심 및 표준 구성 요소입니다.
#include <afxext.h>         // MFC 확장입니다.
#include <afxwin.h>         // MFC �ٽ� �� ǥ�� ���� ����Դϴ�.
#include <afxext.h>         // MFC Ȯ���Դϴ�.
#include <afxdisp.h>        // MFC 자동화 클래스입니다.
#include <afxdisp.h>        // MFC �ڵ�ȭ Ŭ�����Դϴ�.
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h>           // Internet Explorer 4 공용 컨트롤에 대한 MFC 지원입니다.
#include <afxdtctl.h>           // Internet Explorer 4 ���� ��Ʈ�ѿ� ���� MFC �����Դϴ�.
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>             // Windows 공용 컨트롤에 대한 MFC 지원입니다.
#include <afxcmn.h>             // Windows ���� ��Ʈ�ѿ� ���� MFC �����Դϴ�.
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h>     // MFC의 리본 및 컨트롤 막대 지원
#include <afxcontrolbars.h>     // MFC�� ���� �� ��Ʈ�� ���� ����
#include <afxinet.h>
#include <afxcontrolbars.h>
#define _REVIEW_BASE_PATH_                            _T("C:\\DIT_Review")
#define _REVIEW_RECIPE_PATH_                        _T("C:\\DIT_Review\\Recipe")
#define _REVIEW_RECIPE_BACKUP_PATH_                    _T("C:\\DIT_Review\\Recipe\\Backup")
#define _REVIEW_RECIPE_LOGIN_LOG_PATH_                _T("C:\\DIT_Review\\Recipe\\LoginLog")
#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("C:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
//#define _REVIEW_BASE_PATH_                            _T("C:\\DIT_Review")
//#define _REVIEW_RECIPE_PATH_                        _T("C:\\DIT_Review\\Recipe")
//#define _REVIEW_RECIPE_BACKUP_PATH_                    _T("C:\\DIT_Review\\Recipe\\Backup")
//#define _REVIEW_RECIPE_LOGIN_LOG_PATH_                _T("C:\\DIT_Review\\Recipe\\LoginLog")
//#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("C:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
#define _REVIEW_BASE_PATH_                            _T("D:\\DIT_Review")  //210805
#define _REVIEW_RECIPE_PATH_                        _T("D:\\DIT_Review\\Recipe")
#define _REVIEW_RECIPE_BACKUP_PATH_                    _T("D:\\DIT_Review\\Recipe\\Backup")
#define _REVIEW_RECIPE_LOGIN_LOG_PATH_                _T("D:\\DIT_Review\\Recipe\\LoginLog")
#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("D:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
#define _REVIEW_RECIPE_BACKUP_PATH_CPJT                _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\Recipe")
#define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT    _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\ReviewServerConfig")
@@ -72,19 +77,19 @@
#define    COPYDATA_RECIPEEDITOR2REVIEWSYSTEM            1600
// [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
// [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
enum MsgRecipe2Rev
{
    MsgRecipe2Rev_None = -1,
    MsgRecipe2Rev_StandardCameraGlassPos,
    MsgRev2Recipe_StandardCameraGlassPos,
    MsgRecipe2Rev_RecipeCreate,                    // Recipe(PPID) 추가
    MsgRecipe2Rev_RecipeCreate,                    // Recipe(PPID) �߰�
    MsgRev2Recipe_RecipeCreate,
    MsgRecipe2Rev_RecipeChange,                    // Recipe(PPID) 변경
    MsgRecipe2Rev_RecipeChange,                    // Recipe(PPID) ����
    MsgRev2Recipe_RecipeChange,
    MsgRecipe2Rev_RecipeDelete,                    // Recipe(PPID) 삭제
    MsgRecipe2Rev_RecipeDelete,                    // Recipe(PPID) ����
    MsgRev2Recipe_RecipeDelete,
    MsgRecipe2Rev_RecipeModify,                    // Recipe(PPID) Parameter 수정
    MsgRecipe2Rev_RecipeModify,                    // Recipe(PPID) Parameter ����
    MsgRev2Recipe_RecipeModify
};
ReviewSystem/ReviewSystem/CameraControlAlign.cpp
@@ -5,7 +5,8 @@
#include "CHReviewSetting/SystemInfo.h"
#include "CHReviewRecipe/RsRcpAlignInfo.h"
#define ALIGN_TEMPLATE_PATH _T("C:\\DIT_Review\\Recipe\\AlignImage\\")
#define ALIGN_TEMPLATE_PATH _T("D:\\DIT_Review\\Recipe\\AlignImage\\")
//#define ALIGN_TEMPLATE_PATH _T("C:\\DIT_Review\\Recipe\\AlignImage\\") //210805
using namespace CHImageControls;
ReviewSystem/ReviewSystem/CameraControlReview.cpp
@@ -207,11 +207,13 @@
    CString strPath =m_pRCC2P->IRCC2P_GetTotalPitchImageName();
    if(strPath == _T("")){
        strPath = _T("C:\\DIT_Review\\Recipe\\AlignImage\\ReviewAlign.bmp");
        strPath = _T("D:\\DIT_Review\\Recipe\\AlignImage\\ReviewAlign.bmp");
        //strPath = _T("C:\\DIT_Review\\Recipe\\AlignImage\\ReviewAlign.bmp");  //210805
    }
    else
    {
        strPath = _T("C:\\DIT_Review\\Recipe\\AlignImage\\")+strPath;
        strPath = _T("D:\\DIT_Review\\Recipe\\AlignImage\\") + strPath;
        //strPath = _T("C:\\DIT_Review\\Recipe\\AlignImage\\")+strPath; //210805
    }
    
ReviewSystem/ReviewSystem/CameraController.cpp
@@ -268,9 +268,19 @@
    
    for (VectorCameraControlIt it=m_vecCameraControl.begin(); it!=m_vecCameraControl.end(); it++)
    {
        (*it)->SetTriggerMode(ModeInternal);
        int nSub = (*it)->Grab();
        //#3561 210908 LYW ADD Start
        int nSub;
        try
        {
            (*it)->SetTriggerMode(ModeInternal);
            nSub = (*it)->Grab();
        }
        catch (...)
        {
            nSub = FALSE;
        }
        //#3561 210908 LYW ADD End
        if (nSub==1)
            g_pLog->DisplayMessage(_T("[CameraController]Camera_Grab Success![ModeInternal]"));
ReviewSystem/ReviewSystem/DlgControl.cpp
@@ -30,6 +30,7 @@
    m_nMoveAxis            = MoveAxis_Center;
    m_nGlassGridViewIndex = 0;
    pDlgContol          = NULL;
    m_bAlignCamGrab        = FALSE;
}
#define ENABLE_RADIO_TIMER
@@ -111,6 +112,7 @@
    ON_BN_CLICKED(IDC_BT_REVIEW_POPUP, &CDlgControl::OnBnClickedBtReviewPopup)
    ON_BN_CLICKED(IDC_CHECK_USE_SIMULATION, &CDlgControl::OnBnClickedCheckUseSimulation)
    ON_STN_DBLCLK(IDC_STATIC_MAGNIFICATION, &CDlgControl::OnDblclkStaticMagnification)
    ON_BN_CLICKED(IDC_BUTTON_ALIGNCAM_GRAB, &CDlgControl::OnBnClickedButtonAligncamGrab)
END_MESSAGE_MAP()
@@ -184,6 +186,10 @@
                m_ctrlButtonColorCtrl.addControl(IDC_BT_REVIEW_POPUP, this);
                m_ctrlButtonColorCtrl.addControl(IDC_CHECK_USE_SIMULATION, this);
                //#3561 CF AOI Review Align 카메라 끊김 현상 조치 ADD START
                m_ctrlButtonColorCtrl.addControl(IDC_BUTTON_ALIGNCAM_GRAB, this);
                //#3561 CF AOI Review Align 카메라 끊김 현상 조치 ADD END
@@ -1450,4 +1456,24 @@
    {
        (GetDlgItem(IDC_CHECK_USE_SIMULATION))->ShowWindow(SW_SHOW);
    }
}
}
//#3561 CF AOI Review Align 카메라 끊김 현상 조치 ADD START
void CDlgControl::OnBnClickedButtonAligncamGrab()
{
    CSequenceProcessor* pSequenceProcessor = m_pDC2P->IRP2P_GetSequenceProcessor();
    if (pSequenceProcessor == NULL) return;
    if (m_bAlignCamGrab == FALSE)
    {
        pSequenceProcessor->AlignCamera_CameraControl(CameraControlLive);
        m_bAlignCamGrab = TRUE;
    }
    else
    {
        pSequenceProcessor->AlignCamera_CameraControl(CameraControlStop);
        m_bAlignCamGrab = FALSE;
    }
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
}
//#3561 CF AOI Review Align 카메라 끊김 현상 조치 ADD END
ReviewSystem/ReviewSystem/DlgControl.h
@@ -100,6 +100,7 @@
    
    CFontStatic                    m_ctrlKeyMoveJog;
    BOOL                        m_bAlignCamGrab;
    double                        m_dGoPosX;
@@ -209,4 +210,5 @@
    afx_msg void OnBnClickedBtReviewPopup();
    afx_msg void OnBnClickedCheckUseSimulation();
    afx_msg void OnDblclkStaticMagnification();
    afx_msg void OnBnClickedButtonAligncamGrab();
};
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.h
@@ -21,11 +21,11 @@
//enum MotorOringTYPE {
//    LEFT_Top = 0, RIGHT_TOP,LEFT_BOTTOM, RIGHT_BOTTOM
//};
#define    REVIEW_OFFSET_CONFIGFILE_PATH _T("C:\\DIT_Review\\ReviewServerConfig\\")
#define    REVIEW_OFFSET_CONFIGFILE_PATH _T("D:\\DIT_Review\\ReviewServerConfig\\") //210805
#define    REVIEW_OFFSET_CONFIGFILE_NAME _T("ReviewOffSet.cfg")
#define REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME _T("C:\\DIT_Review\\ReviewServerConfig\\ReviewOffSet.cfg")
#define REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME _T("D:\\DIT_Review\\ReviewServerConfig\\ReviewOffSet.cfg")
#define    REVIEW_OFFSET_BACKUP_FORDER_NAME _T("OffsetBackup")
#define    REVIEW_OFFSET_BACKUP_FORDER_PATH _T("C:\\DIT_Review\\ReviewServerConfig\\OffsetBackup\\")
#define    REVIEW_OFFSET_BACKUP_FORDER_PATH _T("D:\\DIT_Review\\ReviewServerConfig\\OffsetBackup\\")
// CDlgDefocusList 대화 상자입니다.
interface IDialogReviewOffSet2Parent
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Flatness.cpp
@@ -983,7 +983,7 @@
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    /*< LYW 20210719 : #3517 ADD Start >*/
    if (m_pDiagnosisManager->CheckManualMode() == FALSE)
    {
        CString strMessage;
@@ -994,7 +994,7 @@
            return;
        }
    }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    /*< LYW 20210719 : #3517 ADD End >*/
    if (m_bState == FALSE)
    {
@@ -1013,7 +1013,7 @@
void CDlgSelfDiagnosis_Flatness::OnBnClickedButtonManual()
{
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    /*< LYW 20210719 : #3517 ADD Start >*/
    if (m_pDiagnosisManager->CheckManualMode() == FALSE)
    {
        CString strMessage;
@@ -1024,7 +1024,7 @@
            return;
        }
    }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    /*< LYW 20210719 : #3517 ADD End >*/
    m_pDiagnosisManager->ManualMeasure_Flatness();
}
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Setting.cpp
@@ -56,12 +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
    /*< LYW 20210719 : #3517 ADD 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
    /*< LYW 20210719 : #3517 ADD 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);
@@ -117,11 +117,11 @@
BOOL CDlgSelfDiagnosis_Setting::ReadAutoDiagnosisConfigFile()
{
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    /*< LYW 20210719 : #3517 ADD 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
    /*< LYW 20210719 : #3517 ADD End >*/
    CDiagnosisInfo* pSettingInfo = m_pDiagnosisManager->GetDiagnosisInfo();
    if (pSettingInfo == NULL)
@@ -143,13 +143,13 @@
    strTemp.Format("%f", pSettingInfo->GetJudgeData_Degree());
    m_editJudgeData_Degree.SetWindowTextA(strTemp);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    /*< LYW 20210719 : #3517 ADD 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
    /*< LYW 20210719 : #3517 ADD End >*/
    strTemp.Format("%d", pSettingInfo->GetCameraFrameWidth());
    m_editFrameWidth.SetWindowTextA(strTemp);
@@ -183,9 +183,9 @@
    strTemp.Format("%d", pSettingInfo->GetGlassSizeY_Flatness());
    m_editGlassSizeY.SetWindowTextA(strTemp);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    /*< LYW 20210719 : #3517 ADD Start >*/
    m_CheckFlatnessSkip.SetCheck(pSettingInfo->GetFlastnessSkipMode());
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    /*< LYW 20210719 : #3517 ADD End >*/
    strTemp.Format("%d", pSettingInfo->GetPanelCount_Wsi());
    m_editPanelCount_Wsi.SetWindowTextA(strTemp);
@@ -193,10 +193,10 @@
    strTemp.Format("%f", pSettingInfo->GetJudgeData_3Sigma());
    m_editJudgeData_3Sigma.SetWindowTextA(strTemp);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    /*< LYW 20210719 : #3517 ADD Start >*/
    strTemp.Format("%f", pSettingInfo->GetWSIStandard());
    m_editWSIStandard.SetWindowTextA(strTemp);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    /*< LYW 20210719 : #3517 ADD End >*/
    strTemp.Format("%f", pSettingInfo->GetPanelPosX_Wsi());
    m_editPanelPosX.SetWindowTextA(strTemp);
@@ -303,7 +303,7 @@
    nTemp = atoi(strTemp);
    macroFile.SetItem(strItem, nTemp);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    /*< LYW 20210719 : #3517 ADD Start >*/
    strItem.Format(_T("FLATNESS_SKIPMODE"));
    nTemp = m_CheckFlatnessSkip.GetCheck();
    macroFile.SetItem(strItem, nTemp);
@@ -323,7 +323,7 @@
    dTemp = atof(strTemp);
    macroFile.SetItem(strItem, dTemp);
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    /*< LYW 20210719 : #3517 ADD End >*/
    strItem.Format(_T("WSI_PANEL_COUNT"));
    m_editPanelCount_Wsi.GetWindowTextA(strTemp);
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Squareness.cpp
@@ -552,7 +552,7 @@
    if (m_pDiagnosisManager == NULL) return;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    /*< LYW 20210719 : #3517 ADD Start >*/
    if (m_pDiagnosisManager->CheckManualMode() == FALSE)
    {
        CString strMessage;
@@ -563,7 +563,7 @@
            return;
        }
    }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    /*< LYW 20210719 : #3517 ADD End >*/
    GetDialogControls();
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp
@@ -68,7 +68,7 @@
    if (m_pDiagnosisManager == NULL) return;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    /*< LYW 20210719 : #3517 ADD Start >*/
    if (m_pDiagnosisManager->CheckManualMode() == FALSE)
    {
        CString strMessage;
@@ -79,7 +79,7 @@
            return;
        }
    }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    /*< LYW 20210719 : #3517 ADD End >*/
    //GetDialogControls();
ReviewSystem/ReviewSystem/FileUploadControl.cpp
@@ -179,7 +179,7 @@
// 
//     CCommendParam *pParam = NULL;
// 
//     //FTPUpLoad이면 반환
//     //FTPUpLoad�̸� ��ȯ
//     if( bFTPUpload )
//         return FALSE;
// 
@@ -301,7 +301,8 @@
    if (NULL == hWnd)
    {
        g_pLog->DisplayMessage(_T("Find FTPUploader Program : Fail."));
        StartFTPUploader(_T("C:\\DIT_Review"));
        StartFTPUploader(_T("D:\\DIT_Review"));  //210805
    }
    else
    {
@@ -314,7 +315,7 @@
        else
        {
            g_pLog->DisplayMessage(_T("Send Data to FTPUploader : Fail."));
            RestartFTPUploader(_T("C:\\DIT_Review")); //A2E FTPUploader
            RestartFTPUploader(_T("D:\\DIT_Review")); //A2E FTPUploader //210805
            bRet = FALSE;
        }
    }
ReviewSystem/ReviewSystem/MainFrm.cpp
@@ -451,9 +451,9 @@
#define strScript "RESTART^AFControl.exe^C:\\AFControl\\program\\AFControl.exe"
    
    CFile file;
    if( FALSE == file.Open(_T("C:\\DIT_Review\\MakeScript.TSF"),CFile::modeCreate | CFile::modeWrite) )
    if( FALSE == file.Open(_T("D:\\DIT_Review\\MakeScript.TSF"),CFile::modeCreate | CFile::modeWrite) ) //210805
    {
        g_pLog->DisplayMessage(_T("File[C:\\DIT_Review\\MakeScript.TSF] Create Fail!!"));
        g_pLog->DisplayMessage(_T("File[D:\\DIT_Review\\MakeScript.TSF] Create Fail!!")); //210805
        return;
    }
@@ -485,7 +485,7 @@
    CString strTarget;
    strTarget.Format(_T("\\\\126.100.100.220\\c\\RemoteTaskMgr\\T\\CopyScript.TSF"));
    
    BOOL bRet = CopyFile(_T("C:\\DIT_Review\\MakeScript.TSF"),strTarget,FALSE);
    BOOL bRet = CopyFile(_T("D:\\DIT_Review\\MakeScript.TSF"),strTarget,FALSE); //210805
    if(bRet == FALSE)
        g_pLog->DisplayMessage(_T("[%s]Send Script Fail!"), strTarget);
    /////////////////////////////////////
ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -8934,6 +8934,11 @@
    SetCurrentWsiMode(nMode);
}
void CReviewInterface::ISP2P_InitAlignCamera()
{
    InitAlignCamera();
}
int CReviewInterface::IWC2P_GetWsiType()
{
    return GetCurrentWsiMode();
ReviewSystem/ReviewSystem/ReviewInterface.h
@@ -297,6 +297,10 @@
    virtual    void                        ISP2P_SetCurrentWsiMode(int nMode);
    //#3561 210908 LYW ADD Start
    virtual void    ISP2P_InitAlignCamera();
    //#3561 210908 LYW ADD End
    virtual CTotalPitchMeasure*            ISP2P_GetTotalPitchMeasure();
    // recipe info
ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp
@@ -3805,49 +3805,85 @@
    BYTE *pImageBufferByte = (BYTE*)(pImageBuffer);
    if (pImageBuffer==NULL) return 0.;
    //#3524_210902_LYW_MOD START
    int nWidth = nImageWidth;
    //int nWidthStep = nImageWidth;
    int nHeight = nImageHeight;
    int nCalWidth = nWidth/2;
    int nCalHeight = nHeight/2;
    //     int nCalWidth = nWidth/2;
    //     int nCalHeight = nHeight/2;
    //
    //     int nStartX = nWidth/2 - nCalWidth/2;
    //     int nStartY = nHeight/2 - nCalHeight/2;
    int nStartX = nWidth/2 - nCalWidth/2;
    int nStartY = nHeight/2 - nCalHeight/2;
    int nCalWidth = nWidth;
    int nCalHeight = nHeight;
    //
    double Focusvalue = 0;
    double SumValue = 0;
    double TempValue = 0;
    double m_nResultFocusValue = 0;
    int nStartX = 0;
    int nStartY = 0;
    for (int y = 0; y < nHeight - 1; y++)
    int nStep = 3;
    double dXValue = 0., dYValue = 0., dCurr = 0., dSum = 0., dFocus = 0.;
    for (int nH = nStartY; nH < nStartY + nCalHeight - nStep; nH++)
    {
        for (int x = 0; x < nWidth - 1; x++)
        for (int nW = nStartX; nW < nStartX + nCalWidth - nStep; nW++)
        {
            TempValue = (double)(pImageBufferByte[y*nWidth + x] - pImageBufferByte[y*nWidth + x + 1]);
            SumValue = TempValue * TempValue;
            TempValue = (double)(pImageBufferByte[y*nWidth + x] - pImageBufferByte[(y + 1)*nWidth + x]);
            SumValue += TempValue * TempValue;
            Focusvalue += sqrt(SumValue);
            //Focusvalue += SumValue;
        }
    }
    m_nResultFocusValue = int(Focusvalue / (double)(nWidth*nHeight));
    double dXValue=0., dYValue=0., dCurr=0., dSum=0., dFocus=0.;
    for(int nH=nStartY ; nH<nStartY+nCalHeight-1 ; nH++)
    {
        for(int nW=nStartX ; nW<nStartX+nCalWidth-1 ; nW++)
        {
            dXValue = float((pImageBufferByte[nH*nW + nW+1] - pImageBufferByte[nH*nW + nW])*(pImageBufferByte[nH*nW + nW+1] - pImageBufferByte[nH*nW + nW]));
            dYValue = float((pImageBufferByte[(nH+1)*nW + nW] - pImageBufferByte[nH*nW + nW])*(pImageBufferByte[(nH+1)*nW + nW] - pImageBufferByte[nH*nW + nW]));
            dXValue = float((pImageBufferByte[nH*nWidth + nW + nStep] - pImageBufferByte[nH*nWidth + nW])*(pImageBufferByte[nH*nWidth + nW + nStep] - pImageBufferByte[nH*nWidth + nW]));
            dYValue = float((pImageBufferByte[(nH + nStep)*nWidth + nW] - pImageBufferByte[nH*nWidth + nW])*(pImageBufferByte[(nH + nStep)*nWidth + nW] - pImageBufferByte[nH*nWidth + nW]));
            dCurr = sqrt(dXValue + dYValue);
            //break;
            dSum += dCurr;
        }
    }
    dFocus = dSum/double(nCalWidth*nCalHeight);
    dFocus = dSum / double(nCalWidth*nCalHeight);
    return dFocus;
    //#3524_210902_LYW_MOD END
    //Origin
//     int nWidth = nImageWidth;
//     int nHeight = nImageHeight;
//     int nCalWidth = nWidth/2;
//     int nCalHeight = nHeight/2;
//
//     int nStartX = nWidth/2 - nCalWidth/2;
//     int nStartY = nHeight/2 - nCalHeight/2;
//
//     //
//     double Focusvalue = 0;
//     double SumValue = 0;
//     double TempValue = 0;
//     double m_nResultFocusValue = 0;
//
//     for (int y = 0; y < nHeight - 1; y++)
//     {
//         for (int x = 0; x < nWidth - 1; x++)
//         {
//             TempValue = (double)(pImageBufferByte[y*nWidth + x] - pImageBufferByte[y*nWidth + x + 1]);
//             SumValue = TempValue * TempValue;
//             TempValue = (double)(pImageBufferByte[y*nWidth + x] - pImageBufferByte[(y + 1)*nWidth + x]);
//             SumValue += TempValue * TempValue;
//
//             Focusvalue += sqrt(SumValue);
//             //Focusvalue += SumValue;
//         }
//     }
//
//     m_nResultFocusValue = int(Focusvalue / (double)(nWidth*nHeight));
//
//     double dXValue=0., dYValue=0., dCurr=0., dSum=0., dFocus=0.;
//     for(int nH=nStartY ; nH<nStartY+nCalHeight-1 ; nH++)
//     {
//         for(int nW=nStartX ; nW<nStartX+nCalWidth-1 ; nW++)
//         {
//             dXValue = float((pImageBufferByte[nH*nW + nW+1] - pImageBufferByte[nH*nW + nW])*(pImageBufferByte[nH*nW + nW+1] - pImageBufferByte[nH*nW + nW]));
//             dYValue = float((pImageBufferByte[(nH+1)*nW + nW] - pImageBufferByte[nH*nW + nW])*(pImageBufferByte[(nH+1)*nW + nW] - pImageBufferByte[nH*nW + nW]));
//             dCurr = sqrt(dXValue + dYValue);
//             dSum += dCurr;
//         }
//     }
//     dFocus = dSum/double(nCalWidth*nCalHeight);
//
//     return dFocus;
}
ReviewSystem/ReviewSystem/ReviewSystem.rc
@@ -483,9 +483,9 @@
    PUSHBUTTON      "Key Jog 시작",IDC_KEY_JOD_MOVE,207,167,45,17,NOT WS_VISIBLE | NOT WS_TABSTOP
    PUSHBUTTON      "test2",IDC_BUTTON_TEST2,273,167,34,17,NOT WS_VISIBLE
    CTEXT           "Key Jog시작",IDC_KEY_JOG_MOVE,392,160,31,24
    PUSHBUTTON      "Reduce",IDC_CHECK_UI_REDUCE,436,77,51,17
    PUSHBUTTON      "Left",IDC_BUTTON_UI_LEFT,436,96,50,17
    PUSHBUTTON      "Right",IDC_BUTTON_UI_RIGHT1,436,116,50,17
    PUSHBUTTON      "Reduce",IDC_CHECK_UI_REDUCE,436,73,51,17
    PUSHBUTTON      "Left",IDC_BUTTON_UI_LEFT,436,92,50,17
    PUSHBUTTON      "Right",IDC_BUTTON_UI_RIGHT1,436,112,50,17
    CONTROL         "Track",IDC_CHECK_AFM_TRACK,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | WS_TABSTOP,369,77,29,57
    LTEXT           "GlassCenter X/Y(mm)",IDC_STATIC,10,105,74,8
    PUSHBUTTON      "Go",IDC_BUTTON_GLASSCENTER_GO_XY,196,101,27,17
@@ -494,6 +494,7 @@
    CONTROL         "OffSet ON",IDC_SELECT_OFFSET_ON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,418,61,63,10
    PUSHBUTTON      "ReviewPopUp",IDC_BT_REVIEW_POPUP,433,18,54,17
    CONTROL         "Use Simulation",IDC_CHECK_USE_SIMULATION,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,418,41,66,10
    PUSHBUTTON      "Align Grab",IDC_BUTTON_ALIGNCAM_GRAB,436,130,50,16
END
IDD_DLG_MODULE_INFO DIALOGEX 0, 0, 532, 187
ReviewSystem/ReviewSystem/SequenceProcessor.h
@@ -370,6 +370,9 @@
    virtual    void    ISP2P_SetCurrentWsiMode(int nMode) = 0;
    //#3561 210908 LYW ADD Start
    virtual void    ISP2P_InitAlignCamera() = 0;
    //#3561 210908 LYW ADD End
    // system info
    virtual const CSystemInfo*            ISP2P_System_GetSystemInfo() = 0;
@@ -620,6 +623,8 @@
    // Review, WSI Stop Siganl
    BOOL    SetMotionStop();
    // Align Camera Control command
    BOOL    AlignCamera_CameraControl(int nControlCmd);
protected:
    // common
@@ -631,9 +636,6 @@
    // PCControl Control command
    BOOL    Signal_SendSignal(int nSignalIndex);
    BOOL    PCControl_ReadTransferData(STransferData* pTransferData);
    // Align Camera Control command
    BOOL    AlignCamera_CameraControl(int nControlCmd);
    // Review Camera Control Command
    void    ReviewCamera_CameraControl(int nControlCmd);
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -547,6 +547,8 @@
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Fail Data!"));
    }
    AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence 변경
    SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
@@ -1256,10 +1258,6 @@
{
     m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] AlignStart!"));
    AlignCamera_CameraControl(CameraControlLive);  // 210805 Align Camera Sequence ����
    Sleep(300);
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
    if (GetSimulationMode() == FALSE)
    {
@@ -1267,6 +1265,30 @@
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Start Ack!"));
    }
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
    //#3561 210908 LYW ADD Start
     int nAlignReconnectRetryMaxCount = 3;
     for (int i = 0; i < nAlignReconnectRetryMaxCount; i++)
    {
        if (AlignCamera_CameraControl(CameraControlLive) == FALSE)
        {
            m_pSP2P->ISP2P_DisplayMessage(_T("[AlignStart] AlignConnect Fail! Reconect Start! ReconnectRetry count = %d"), nAlignReconnectRetryMaxCount + 1);
            system("netsh interface set interface name = \"Align #1\" admin = disable&& netsh interface set interface name = \"Align #1\" admin = enable&& netsh interface set interface name = \"Align #2\" admin = disable&& netsh interface set interface name = \"Align #2\" admin = enable");
            Sleep(10000);
            m_pSP2P->ISP2P_InitAlignCamera();
        }
        else
        {
            m_pSP2P->ISP2P_DisplayMessage(_T("[AlignStart] AlignConnect Success! "));
            break;
        }
    }
    //#3561 210908 LYW ADD End
    Sleep(300);
    //original
//     if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_AlignStartAck_CPJT))
//         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Start Ack!"));
@@ -8800,12 +8822,11 @@
    break;
    case PCControlRecv_Autodiagnosis:
    {
        //#3514_LYW_CF AOI Review �ڰ����� ��� ����_START
        /*< LYW 20210719 : #3517 ADD 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) {
@@ -8815,7 +8836,7 @@
            
            m_pSP2P->ISP2P_GetDiagnosisManager()->RecvSignalToSignalControl(0, nDiagnosisMode);
        }
        //#3514_LYW_CF AOI Review �ڰ����� ��� ����_END
        /*< LYW 20210719 : #3517 ADD End >*/
        else
            bResult = SendSignalOffToSignalControl(PCControlSendSignalIndex_DiagnoAck, 0);
ReviewSystem/ReviewSystem/resource.h
@@ -111,6 +111,7 @@
#define IDC_BUTTON_LEFT                 1008
#define IDC_BUTTON_APPLT_OFFSET         1008
#define IDC_BUTTON_PROGRAMEXIT          1008
#define IDC_BUTTON_ALIGNCAM_GRAB        1008
#define IDC_SPIN2                       1009
#define IDC_CHECK_REVIEW_PATH2          1009
#define IDC_CHECK_AUTO_SELECT_CAMERA    1009
ReviewSystem/ReviewSystem/stdafx.h
@@ -77,20 +77,34 @@
#define ID_TIMER_SEND_SIGNAL_ALIVE            (WM_USER + 107)
#define _REVIEW_SERVER_BASE_PATH_                    _T("C:\\DIT_Review")
#define _REVIEW_SERVER_LOG_PATH_                    _T("C:\\DIT_Review\\ReviewServerLog")
#define _REVIEW_RECIPE_PATH_                        _T("C:\\DIT_Review\\Recipe")
#define _REVIEW_REF_RECIPE_PATH_                    _T("C:\\DIT_Review\\Recipe\\Reference")
#define _REVIEW_SERVER_CONFIG_PATH_                    _T("C:\\DIT_Review\\ReviewServerConfig")
#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("C:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
#define _REVIEW_SERVER_BASE_PATH_                    _T("D:\\DIT_Review") //210805
#define _REVIEW_SERVER_LOG_PATH_                    _T("D:\\DIT_Review\\ReviewServerLog")
#define _REVIEW_RECIPE_PATH_                        _T("D:\\DIT_Review\\Recipe")
#define _REVIEW_REF_RECIPE_PATH_                    _T("D:\\DIT_Review\\Recipe\\Reference")
#define _REVIEW_SERVER_CONFIG_PATH_                    _T("D:\\DIT_Review\\ReviewServerConfig")
#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("D:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
#define _SYSTEM_SETTING_TITLE_                        _T("ReviewSystemSetting")
#define _RECIPE_EDITOR_TITLE_                        _T("ReviewRecipeEditor")
#define _REVIEW_LOGIN_LOG_PATH_                        _T("C:\\DIT_Review\\ReviewServerLog\\LoginLog")
#define _REVIEW_REFLOW_RECIPE_PATH_                    _T("C:\\DIT_Review\\Recipe\\Reflow")
#define ALIGN_TEMPLATE_PATH                            _T("C:\\DIT_Review\\Recipe\\AlignImage")
#define _REVIEW_LOGIN_LOG_PATH_                        _T("D:\\DIT_Review\\ReviewServerLog\\LoginLog")
#define _REVIEW_REFLOW_RECIPE_PATH_                    _T("D:\\DIT_Review\\Recipe\\Reflow")
#define ALIGN_TEMPLATE_PATH                            _T("D:\\DIT_Review\\Recipe\\AlignImage")
#define _REVIEW_RECIPE_BACKUP_PATH_CPJT                _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\Recipe")
#define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT    _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\ReviewServerConfig")
//#define _REVIEW_SERVER_BASE_PATH_                    _T("C:\\DIT_Review")
//#define _REVIEW_SERVER_LOG_PATH_                    _T("C:\\DIT_Review\\ReviewServerLog")
//#define _REVIEW_RECIPE_PATH_                        _T("C:\\DIT_Review\\Recipe")
//#define _REVIEW_REF_RECIPE_PATH_                    _T("C:\\DIT_Review\\Recipe\\Reference")
//#define _REVIEW_SERVER_CONFIG_PATH_                    _T("C:\\DIT_Review\\ReviewServerConfig")
//#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("C:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
//#define _SYSTEM_SETTING_TITLE_                        _T("ReviewSystemSetting")
//#define _RECIPE_EDITOR_TITLE_                        _T("ReviewRecipeEditor")
//#define _REVIEW_LOGIN_LOG_PATH_                        _T("C:\\DIT_Review\\ReviewServerLog\\LoginLog")
//#define _REVIEW_REFLOW_RECIPE_PATH_                    _T("C:\\DIT_Review\\Recipe\\Reflow")
//#define ALIGN_TEMPLATE_PATH                            _T("C:\\DIT_Review\\Recipe\\AlignImage")
//#define _REVIEW_RECIPE_BACKUP_PATH_CPJT                _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\Recipe")
//#define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT    _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\ReviewServerConfig")
#define TOTAL_WINDOW_SIZE_X        1920
#define TOTAL_WINDOW_SIZE_Y        1040
ReviewSystem/ReviewSystemSetting/ReviewSystemSettingDlg.cpp
@@ -1,5 +1,5 @@
// ReviewSystemSettingDlg.cpp : 구현 파일
// ReviewSystemSettingDlg.cpp : ���� ����
//
#include "stdafx.h"
@@ -31,20 +31,20 @@
#endif
// 응용 프로그램 정보에 사용되는 CAboutDlg 대화 상자입니다.
// ���� ���α׷� ������ ���Ǵ� CAboutDlg ��ȭ �����Դϴ�.
class CAboutDlg : public CDialog
{
public:
    CAboutDlg();
// 대화 상자 데이터입니다.
// ��ȭ ���� �������Դϴ�.
    enum { IDD = IDD_ABOUTBOX };
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 지원입니다.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV �����Դϴ�.
// 구현입니다.
// �����Դϴ�.
protected:
    DECLARE_MESSAGE_MAP()
};
@@ -62,7 +62,7 @@
END_MESSAGE_MAP()
// CReviewSystemSettingDlg 대화 상자
// CReviewSystemSettingDlg ��ȭ ����
@@ -87,7 +87,8 @@
    m_pNetworkManager = NULL;
    // init Log 
    new CDisplayMessage(_T("C:\\DIT_Review\\ReviewServerConfig\\Log"));
    //new CDisplayMessage(_T("C:\\DIT_Review\\ReviewServerConfig\\Log"));
    new CDisplayMessage(_T("D:\\DIT_Review\\ReviewServerConfig\\Log"));//210805
}
CReviewSystemSettingDlg::~CReviewSystemSettingDlg()
@@ -185,15 +186,15 @@
END_MESSAGE_MAP()
// CReviewSystemSettingDlg 메시지 처리기
// CReviewSystemSettingDlg �޽��� ó����
BOOL CReviewSystemSettingDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    // 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.
    // �ý��� �޴��� "����..." �޴� �׸��� �߰��մϴ�.
    // IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다.
    // IDM_ABOUTBOX�� �ý��� ��� ������ �־�� �մϴ�.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);
@@ -211,12 +212,12 @@
        }
    }
    // 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
    //  프레임워크가 이 작업을 자동으로 수행합니다.
    SetIcon(m_hIcon, TRUE);            // 큰 아이콘을 설정합니다.
    SetIcon(m_hIcon, FALSE);        // 작은 아이콘을 설정합니다.
    // �� ��ȭ ������ �������� �����մϴ�. ���� ���α׷��� �� â�� ��ȭ ���ڰ� �ƴ� ��쿡��
    //  �����ӿ�ũ�� �� �۾��� �ڵ����� �����մϴ�.
    SetIcon(m_hIcon, TRUE);            // ū �������� �����մϴ�.
    SetIcon(m_hIcon, FALSE);        // ���� �������� �����մϴ�.
    // TODO: 여기에 추가 초기화 작업을 추가합니다.
    // TODO: ���⿡ �߰� �ʱ�ȭ �۾��� �߰��մϴ�.
    CreateReviewDirectory();
    CreateManager();
    ReadReviewSystemConfigFile();
@@ -225,7 +226,7 @@
    g_pLog->DisplayMessage(_T("SystemSetting is Started!"));
    return TRUE;  // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
    return TRUE;  // ��Ŀ���� ��Ʈ�ѿ� �������� ������ TRUE�� ��ȯ�մϴ�.
}
void CReviewSystemSettingDlg::OnSysCommand(UINT nID, LPARAM lParam)
@@ -241,19 +242,19 @@
    }
}
// 대화 상자에 최소화 단추를 추가할 경우 아이콘을 그리려면
//  아래 코드가 필요합니다. 문서/뷰 모델을 사용하는 MFC 응용 프로그램의 경우에는
//  프레임워크에서 이 작업을 자동으로 수행합니다.
// ��ȭ ���ڿ� �ּ�ȭ ���߸� �߰��� ��� �������� �׸�����
//  �Ʒ� �ڵ尡 �ʿ��մϴ�. ����/�� ���� ����ϴ� MFC ���� ���α׷��� ��쿡��
//  �����ӿ�ũ���� �� �۾��� �ڵ����� �����մϴ�.
void CReviewSystemSettingDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트
        CPaintDC dc(this); // �׸��⸦ ���� ����̽� ���ؽ�Ʈ
        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
        // 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다.
        // Ŭ���̾�Ʈ �簢������ �������� ����� ����ϴ�.
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
@@ -261,7 +262,7 @@
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
        // 아이콘을 그립니다.
        // �������� �׸��ϴ�.
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
@@ -270,8 +271,8 @@
    }
}
// 사용자가 최소화된 창을 끄는 동안에 커서가 표시되도록 시스템에서
//  이 함수를 호출합니다.
// ����ڰ� �ּ�ȭ�� â�� ��� ���ȿ� Ŀ���� ǥ�õǵ��� �ý��ۿ���
//  �� �Լ��� ȣ���մϴ�.
HCURSOR CReviewSystemSettingDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
@@ -280,7 +281,7 @@
void CReviewSystemSettingDlg::OnTcnSelchangeTabSysSettingMainTab(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    SystemMainTab nTabIdx;
    nTabIdx = (SystemMainTab)m_ctrlTabMain.GetCurSel();
@@ -397,12 +398,12 @@
void CReviewSystemSettingDlg::InitTabControl()
{
    int nIdx = 0;
    m_ctrlTabMain.InsertItem(nIdx++, _T("Equipment Setting"));//_T("장비 설정"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Glass Type Setting"));//_T("글라스 타입 설정"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Align Setting"));//_T("얼라인 설정"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Signal Setting"));//_T("Signal 설정"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Motor Setting"));//_T("모터 설정"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Network Setting"));//_T("네트워크 설정"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Equipment Setting"));//_T("��� ����"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Glass Type Setting"));//_T("�۶� Ÿ�� ����"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Align Setting"));//_T("����� ����"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Signal Setting"));//_T("Signal ����"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Motor Setting"));//_T("���� ����"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Network Setting"));//_T("��Ʈ��ũ ����"));
}
BOOL CReviewSystemSettingDlg::ReadReviewSystemConfigFile()
@@ -526,7 +527,7 @@
        strBackupFile = strBackupPath + strBackupFile;
        CopyFile(_REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_, strBackupFile, TRUE);
        //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD START
        //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD START
        strBackupPath = _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT;
        CreateDirectory(strBackupPath, NULL);
@@ -535,9 +536,9 @@
        strBackupFile.Format(_T("%s\\SystemSetting.cfg"), strBackupPath);
        CopyFile(_REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_, strBackupFile, FALSE);
        //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD END
        //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD END
        if (IDNO == AfxMessageBox(_T("Save complete. Do you want to close System Setting program?"), MB_YESNO | MB_ICONQUESTION))//_T("저장 완료되었습니다. 시스템 설정 프로그램을 종료하시겠습니까?"), MB_YESNO | MB_ICONQUESTION))
        if (IDNO == AfxMessageBox(_T("Save complete. Do you want to close System Setting program?"), MB_YESNO | MB_ICONQUESTION))//_T("���� �Ϸ�Ǿ����ϴ�. �ý��� ���� ���α׷��� �����Ͻðڽ��ϱ�?"), MB_YESNO | MB_ICONQUESTION))
        {
            return;
        }
@@ -549,14 +550,14 @@
    }
    else
    {
        AfxMessageBox(_T("Save Fail!"));//_T("저장 실패하였습니다."));
        AfxMessageBox(_T("Save Fail!"));//_T("���� �����Ͽ����ϴ�."));
    }
}
void CReviewSystemSettingDlg::OnBnClickedCancel()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    if (IDNO == AfxMessageBox(_T("Do you want to close System Setting program?"), MB_YESNO | MB_ICONQUESTION))//_T("시스템 설정 프로그램을 종료하시겠습니까?"), MB_YESNO | MB_ICONQUESTION))
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    if (IDNO == AfxMessageBox(_T("Do you want to close System Setting program?"), MB_YESNO | MB_ICONQUESTION))//_T("�ý��� ���� ���α׷��� �����Ͻðڽ��ϱ�?"), MB_YESNO | MB_ICONQUESTION))
    {
        return;
    }
@@ -568,7 +569,7 @@
BOOL CReviewSystemSettingDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
    // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
    // TODO: ���⿡ �޽��� ó���� �ڵ带 �߰� ��/�Ǵ� �⺻���� ȣ���մϴ�.
    if (pCopyDataStruct->dwData == COPYDATA_SYSTEMSETTING2REVIEWSYSTEM)
    {
        COPYDATA_SYSTEM2REV* pCopyData = (COPYDATA_SYSTEM2REV*)pCopyDataStruct->lpData;
ReviewSystem/ReviewSystemSetting/stdafx.h
@@ -1,7 +1,7 @@
// stdafx.h : 자주 사용하지만 자주 변경되지는 않는
// 표준 시스템 포함 파일 및 프로젝트 관련 포함 파일이
// 들어 있는 포함 파일입니다.
// stdafx.h : ���� ��������� ���� ��������� �ʴ�
// ǥ�� �ý��� ���� ���� �� ������Ʈ ���� ���� ������
// ��� �ִ� ���� �����Դϴ�.
#pragma once
@@ -10,37 +10,42 @@
#endif
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN            // 거의 사용되지 않는 내용은 Windows 헤더에서 제외합니다.
#define VC_EXTRALEAN            // ���� ������ �ʴ� ������ Windows ������� �����մϴ�.
#endif
#include "targetver.h"
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 일부 CString 생성자는 명시적으로 선언됩니다.
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // �Ϻ� CString �����ڴ� ��������� ����˴ϴ�.
// MFC의 공통 부분과 무시 가능한 경고 메시지에 대한 숨기기를 해제합니다.
// MFC�� ���� �κа� ���� ������ ��� �޽����� ���� ����⸦ �����մϴ�.
#define _AFX_ALL_WARNINGS
#include <afxwin.h>         // MFC 핵심 및 표준 구성 요소입니다.
#include <afxext.h>         // MFC 확장입니다.
#include <afxwin.h>         // MFC �ٽ� �� ǥ�� ���� ����Դϴ�.
#include <afxext.h>         // MFC Ȯ���Դϴ�.
#include <afxdisp.h>        // MFC 자동화 클래스입니다.
#include <afxdisp.h>        // MFC �ڵ�ȭ Ŭ�����Դϴ�.
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h>           // Internet Explorer 4 공용 컨트롤에 대한 MFC 지원입니다.
#include <afxdtctl.h>           // Internet Explorer 4 ���� ��Ʈ�ѿ� ���� MFC �����Դϴ�.
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>             // Windows 공용 컨트롤에 대한 MFC 지원입니다.
#include <afxcmn.h>             // Windows ���� ��Ʈ�ѿ� ���� MFC �����Դϴ�.
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h>     // MFC의 리본 및 컨트롤 막대 지원
#include <afxcontrolbars.h>     // MFC�� ���� �� ��Ʈ�� ���� ����
#define _REVIEW_SERVER_BASE_PATH_                    _T("C:\\DIT_Review")
#define _REVIEW_SERVER_CONFIG_PATH_                    _T("C:\\DIT_Review\\ReviewServerConfig")
#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("C:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
#define _REVIEW_SERVER_SYSTEM_PASSWORD_FILE_PATH_    _T("C:\\DIT_Review\\ReviewServerConfig\\SystemSetting.dat")
#define _REVIEW_SERVER_BASE_PATH_                    _T("D:\\DIT_Review")  //210805
#define _REVIEW_SERVER_CONFIG_PATH_                    _T("D:\\DIT_Review\\ReviewServerConfig")
#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("D:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
#define _REVIEW_SERVER_SYSTEM_PASSWORD_FILE_PATH_    _T("D:\\DIT_Review\\ReviewServerConfig\\SystemSetting.dat")
//#define _REVIEW_SERVER_BASE_PATH_                    _T("C:\\DIT_Review")
//#define _REVIEW_SERVER_CONFIG_PATH_                    _T("C:\\DIT_Review\\ReviewServerConfig")
//#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("C:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
//#define _REVIEW_SERVER_SYSTEM_PASSWORD_FILE_PATH_    _T("C:\\DIT_Review\\ReviewServerConfig\\SystemSetting.dat")
#define _REVIEW_RECIPE_BACKUP_PATH_CPJT                _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\Recipe")
#define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT    _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\ReviewServerConfig")
#define _REVIEW_SYSTEM_TITLE_                        _T("ReviewSystem")
@@ -60,7 +65,7 @@
    MsgSystem2Rev_ChangeSysConfig,
    MsgRev2System_ChangeSysConfig,
    // [2017:5:2]-[WEZASW] : TFE Measurement 설비 UNIT Test(Signal 수동 발생)를 위한 추가
    // [2017:5:2]-[WEZASW] : TFE Measurement ���� UNIT Test(Signal ���� �߻�)�� ���� �߰�
    MsgSystem2Rev_SendAlignAlarmSignal,
    MsgRev2System_SendAlignAlarmSignal,
ReviewSystem/include/CHReviewRecipe/RsRcpAlignInfo.h
@@ -1,7 +1,11 @@
#pragma once
#define ALIGN_IMAGE_PATH _T("C:\\DIT_Review\\Recipe\\AlignImage")
#define REFLOW_IMAGE_PATH _T("C:\\DIT_Review\\Recipe\\Reflow")
#define ALIGN_IMAGE_PATH _T("D:\\DIT_Review\\Recipe\\AlignImage")  //210805
#define REFLOW_IMAGE_PATH _T("D:\\DIT_Review\\Recipe\\Reflow")
//#define ALIGN_IMAGE_PATH _T("C:\\DIT_Review\\Recipe\\AlignImage")
//#define REFLOW_IMAGE_PATH _T("C:\\DIT_Review\\Recipe\\Reflow")
class AFX_EXT_CLASS CRsRcpAlignInfo
{
ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisInfo.h
@@ -3,7 +3,8 @@
#include <vector>
// path define
#define REVIEW_AUTO_DIAGNOSIS_SETTING_FILE_PATH            _T("C:\\DIT_Review\\DiagnosisConfig")
#define REVIEW_AUTO_DIAGNOSIS_SETTING_FILE_PATH            _T("D:\\DIT_Review\\DiagnosisConfig")  //210805
//#define REVIEW_AUTO_DIAGNOSIS_SETTING_FILE_PATH            _T("C:\\DIT_Review\\DiagnosisConfig")
#define REVIEW_AUTO_DIAGNOSIS_SETTING_FILE_NAME            _T("AutoDiagnosisSetting.cfg")
#define REVIEW_AUTO_DIAGNOSIS_DATA_FILE_PATH            _T("D:\\ResultData\\AutoDiagnosis")
#define REVIEW_AUTO_DIAGNOSIS_DATA_IMAGE_FILE_PATH        _T("D:\\ResultData\\AutoDiagnosis\\ResultImage")
@@ -58,7 +59,7 @@
    virtual void IDP2P_WsiMotorMotionEnd(int nModuleIdx, double dPosX, double dPosY) = 0;
    virtual BOOL IDP2P_DiagnosisSendCompleteSig()=0;
    virtual BOOL IDP2P_DiagnosisSendJudgeAlarm() = 0; //0412 AU°¡Aø´U ½AE£ Aß°¡
    virtual BOOL IDP2P_DiagnosisSendJudgeAlarm() = 0; //0412 AU�Ƣ�A����U ��AE�� A���Ƣ�
    // Dialog
    virtual BOOL IDP2P_SetDlgFlatness(int nIndex) = 0;
@@ -224,9 +225,9 @@
        m_dReviewPanelPosY2 = 0;
        m_dReviewPanelPosX4 = 0;
        m_dReviewPanelPosY4 = 0;
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
        /*< LYW 20210719 : #3517 ADD Start >*/
        m_nFlatnessSkipMode = 0;
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
        /*< LYW 20210719 : #3517 ADD End >*/
    }
@@ -253,12 +254,12 @@
    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
    /*< LYW 20210719 : #3517 ADD 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
    /*< LYW 20210719 : #3517 ADD End >*/
    // getter
@@ -290,12 +291,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
    /*< LYW 20210719 : #3517 ADD 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
    /*< LYW 20210719 : #3517 ADD End >*/
    //Review
public:
    double                    GetReviewPanelPosX() const { return m_dReviewPanelPosX; }
@@ -324,10 +325,10 @@
    int                            m_nCameraFrameHeight;
    double                        m_dCameraResolution;
    double                        m_dJudgeData_Degree;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    /*< LYW 20210719 : #3517 ADD Start >*/
    double                        m_dSquarenessStandard;
    double                        m_dSquarenessStandard2;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    /*< LYW 20210719 : #3517 ADD End >*/
    // Flatness
    CDiagnosisResult            m_dataSettingResult_Flatness;        // single data
@@ -337,17 +338,17 @@
    int                            m_nRangeCount_Flatness;
    int                            m_nGlassSizeX;
    int                            m_nGlassSizeY;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    /*< LYW 20210719 : #3517 ADD Start >*/
    int                            m_nFlatnessSkipMode;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    /*< LYW 20210719 : #3517 ADD End >*/
    // wsi
    VectorDiagnosisResult        m_vecSettingResult_Wsi;        // add module count
    int                            m_nPanelCount_Wsi;
    double                        m_dJudgeData_3Sigma;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    /*< LYW 20210719 : #3517 ADD Start >*/
    double                        m_dWSIStandard;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    /*< LYW 20210719 : #3517 ADD End >*/
    double                        m_dPanelPosX;
    double                        m_dPanelPosY;