SDC C-Project CF Review 프로그램
LYW
2021-07-23 a6552335164ce062567b76aa7d097fd046129474
Ongoing90 #3517 CF AOI Review 자가진단 기능 개선

1. WSI 자가진단데이터 UI 추가
2. RawMessenger 검사쪽 수정으로 인해 업데이트
2개 파일 추가됨
37개 파일 변경됨
2010 ■■■■■ 파일 변경됨
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.rc 21 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.vcxproj 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.vcxproj.filters 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp 122 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.cpp 11 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.h 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h 14 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp 77 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.h 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/InterfaceFTP.h 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp 396 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.h 65 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/resource.h 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/Extern/DitGlassRawClient.cpp 29 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/Extern/DitGlassRawClient.h 16 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/Extern/DitGlassRawStruct.h 253 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp 11 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/DitGlassRawServer.h 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/DitGlassRawStruct.h 253 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/bin/Config/PathSetting.ini 2 ●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/bin/ReviewHistroy.exe 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp 94 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DitGlassRawClient.cpp 4 ●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DitGlassRawClient.h 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DitGlassRawStruct.h 253 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgSelfDiagnosis.cpp 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp 137 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.h 24 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.cpp 55 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.h 13 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewProcessor.h 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp 39 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewSystem.rc 65 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor.cpp 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor.h 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/resource.h 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisProcessor.h 2 ●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.rc
@@ -131,20 +131,23 @@
    LTEXT           "-",IDC_STATIC_SERVERCMD,451,61,102,8
    PUSHBUTTON      "Test1",IDC_TEST1,136,45,43,14,NOT WS_VISIBLE
    PUSHBUTTON      "Test2",IDC_TEST2,136,60,43,14,NOT WS_VISIBLE
    GROUPBOX        "Stack File",IDC_STATIC,7,82,216,75
    CONTROL         "Use Stack File Read",IDC_CHECK_STACKFILEREAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,19,97,77,10
    EDITTEXT        IDC_EDIT_STACK_LOCALSAVEPATH,57,115,163,14,ES_AUTOHSCROLL
    LTEXT           "Local Path :",IDC_STATIC,14,117,40,8
    GROUPBOX        "DownLoad File",IDC_STATIC,7,82,216,75
    CONTROL         "",IDC_CHECK_STACKFILEREAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,99,16,10
    EDITTEXT        IDC_EDIT_STACK_LOCALSAVEPATH,94,96,121,14,ES_AUTOHSCROLL
    PUSHBUTTON      "Apply",IDC_BTN_STACKAPPLY,180,139,39,14
    PUSHBUTTON      "Send",IDC_TEST_CMD,110,60,20,14,WS_DISABLED
    LTEXT           "Command : ",IDC_STATIC,17,63,39,8
    COMBOBOX        IDC_CMB_COMMAND,61,61,48,128,CBS_DROPDOWNLIST | WS_DISABLED | WS_VSCROLL | WS_TABSTOP
    EDITTEXT        IDC_EDIT_STACK_EQUIPID,45,133,32,14,ES_AUTOHSCROLL
    LTEXT           "Equip ID :",IDC_STATIC,11,136,32,8
    EDITTEXT        IDC_EDIT_STACK_PARAM1,113,134,24,14,ES_AUTOHSCROLL
    LTEXT           "Param :",IDC_STATIC,85,137,28,8
    EDITTEXT        IDC_EDIT_STACK_PARAM2,139,134,24,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT_STACK_EQUIPID,45,133,32,14,ES_AUTOHSCROLL | NOT WS_VISIBLE
    LTEXT           "Equip ID :",IDC_STATIC,11,136,32,8,NOT WS_VISIBLE
    EDITTEXT        IDC_EDIT_STACK_PARAM1,113,134,24,14,ES_AUTOHSCROLL | NOT WS_VISIBLE
    LTEXT           "Param :",IDC_STATIC,85,137,28,8,NOT WS_VISIBLE
    EDITTEXT        IDC_EDIT_STACK_PARAM2,139,134,24,14,ES_AUTOHSCROLL | NOT WS_VISIBLE
    PUSHBUTTON      "Manual\nFTP Upload",IDC_BTN_FTP_MANUALUPLOAD,418,20,39,31,BS_MULTILINE | WS_DISABLED
    LTEXT           "Stack File",IDC_STATIC,16,100,30,8
    LTEXT           "RawMerge File",IDC_STATIC,15,115,46,8
    CONTROL         "",IDC_CHECK_RAWMERGEFILEREAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,115,16,10
    EDITTEXT        IDC_EDIT_RAWMERGE_LOCALSAVEPATH,94,112,121,14,ES_AUTOHSCROLL
END
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.vcxproj
@@ -234,6 +234,7 @@
    <ClCompile Include="GlassRawRTMS.cpp" />
    <ClCompile Include="InterfaceFTP.cpp" />
    <ClCompile Include="MacroResultFile.cpp" />
    <ClCompile Include="RawResultReader.cpp" />
    <ClCompile Include="StackResultCPJT.cpp" />
    <ClCompile Include="StackResultCSOT.cpp" />
    <ClCompile Include="stdafx.cpp">
@@ -261,6 +262,7 @@
    <ClInclude Include="GlassRawRTMS.h" />
    <ClInclude Include="InterfaceFTP.h" />
    <ClInclude Include="MacroResultFile.h" />
    <ClInclude Include="RawResultReader.h" />
    <ClInclude Include="Resource.h" />
    <ClInclude Include="StackResultCPJT.h" />
    <ClInclude Include="StackResultCSOT.h" />
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.vcxproj.filters
@@ -93,6 +93,9 @@
    <ClCompile Include="StackResultCPJT.cpp">
      <Filter>RawInterface\Stack</Filter>
    </ClCompile>
    <ClCompile Include="RawResultReader.cpp">
      <Filter>RawInterface\Stack</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="akLoggerExt.h">
@@ -161,6 +164,9 @@
    <ClInclude Include="StackResultCPJT.h">
      <Filter>RawInterface\Stack</Filter>
    </ClInclude>
    <ClInclude Include="RawResultReader.h">
      <Filter>RawInterface\Stack</Filter>
    </ClInclude>
  </ItemGroup>
  <ItemGroup>
    <None Include="res\DitGlassRawMessenger.ico">
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp
@@ -1,5 +1,5 @@
// DitGlassRawMessengerDlg.cpp : ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
// DitGlassRawMessengerDlg.cpp : êµ¬í˜„ íŒŒì¼
//
#include "stdafx.h"
@@ -23,20 +23,20 @@
#define GRID_TEXT_COLOR            RGB(255,255,255)
#define GRID_ALARM_TEXT_COLOR    RGB(255,0,0)
#define GRID_LINE_COLOR            GRID_FIX_COLOR
// ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½Î±×·ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½Ç´ï¿½ 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()
};
@@ -54,7 +54,7 @@
END_MESSAGE_MAP()
// CDitGlassRawMessengerDlg ï¿½ï¿½È­ ï¿½ï¿½ï¿½ï¿½
// CDitGlassRawMessengerDlg ëŒ€í™” ìƒìž
@@ -127,7 +127,7 @@
    m_vecStrGridDefectHeader.push_back("CellY(mm)");
    m_vecStrGridDefectHeader.push_back("ScrtRatio");
    m_vecStrGridDefectHeader.push_back("Density");
    //201207 CJH - Merge ï¿½ï¿½ï¿½ï¿½ È®ï¿½ï¿½
    //201207 CJH - Merge ì—¬ë¶€ í™•인
    m_vecStrGridDefectHeader.push_back("MergeState");
}
@@ -192,16 +192,16 @@
    if (timestruct.tm_mon>11 || timestruct.tm_mon<0 )
        ASSERT(FALSE);
}
// CDitGlassRawMessengerDlg ï¿½Þ½ï¿½ï¿½ï¿½ Ã³ï¿½ï¿½ï¿½ï¿½
// CDitGlassRawMessengerDlg ë©”시지 ì²˜ë¦¬ê¸°
BOOL CDitGlassRawMessengerDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    DragAcceptFiles(TRUE);
    // ï¿½Ã½ï¿½ï¿½ï¿½ ï¿½Þ´ï¿½ï¿½ï¿½ "����..." ï¿½Þ´ï¿½ ï¿½×¸ï¿½ï¿½ï¿½ ï¿½ß°ï¿½ï¿½Õ´Ï´ï¿½.
    // ì‹œìŠ¤í…œ ë©”뉴에 "정보..." ë©”뉴 í•­ëª©ì„ ì¶”가합니다.
    // IDM_ABOUTBOX�� ï¿½Ã½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½Ö¾ï¿½ï¿½ ï¿½Õ´Ï´ï¿½.
    // IDM_ABOUTBOX는 ì‹œìŠ¤í…œ ëª…ë ¹ ë²”위에 ìžˆì–´ì•¼ í•©ë‹ˆë‹¤.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);
@@ -219,16 +219,16 @@
        }
    }
    // ï¿½ï¿½ ï¿½ï¿½È­ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½Õ´Ï´ï¿½. ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½Î±×·ï¿½ï¿½ï¿½ ï¿½ï¿½ Ã¢ï¿½ï¿½ ï¿½ï¿½È­ ï¿½ï¿½ï¿½Ú°ï¿½ ï¿½Æ´ï¿½ ï¿½ï¿½ì¿¡ï¿½ï¿½
    //  ï¿½ï¿½ï¿½ï¿½ï¿½Ó¿ï¿½Å©ï¿½ï¿½ ï¿½ï¿½ ï¿½Û¾ï¿½ï¿½ï¿½ ï¿½Úµï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½Õ´Ï´ï¿½.
    SetIcon(m_hIcon, TRUE);            // Å« ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½Õ´Ï´ï¿½.
    SetIcon(m_hIcon, FALSE);        // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½Õ´Ï´ï¿½.
    // ì´ ëŒ€í™” ìƒìžì˜ ì•„이콘을 ì„¤ì •합니다. ì‘ìš© í”„로그램의 ì£¼ ì°½ì´ ëŒ€í™” ìƒìžê°€ ì•„닐 ê²½ìš°ì—ëŠ”
    //  í”„레임워크가 ì´ ìž‘업을 ìžë™ìœ¼ë¡œ ìˆ˜í–‰í•©ë‹ˆë‹¤.
    SetIcon(m_hIcon, TRUE);            // í° ì•„이콘을 ì„¤ì •합니다.
    SetIcon(m_hIcon, FALSE);        // ìž‘은 ì•„이콘을 ì„¤ì •합니다.
    //Ʈ���̾����� ï¿½ï¿½ï¿½ï¿½
    //트레이아이콘 êµ¬ì„±
    m_TrayIcon = FALSE;
    ResTrayIcon();
    //��� ï¿½ï¿½ï¿½ï¿½
    //빌드 ì •ë³´
    {
        CString strBuild;
        tm tmBuild;
@@ -237,7 +237,7 @@
        SetDlgItemText(IDC_BUILDDATE, strBuild);
    }
    //�������� ï¿½ï¿½ï¿½ï¿½ ï¿½Ð¾ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2018/11/20]
    //설정파일 ì •ë³´ ì½ì–´ ì˜¤ê¸° [김태현 2018/11/20]
    {
        m_strConfigFile;
        {
@@ -254,6 +254,8 @@
        akFileDB.getItem("LogFilePath", m_ConfigOption.m_strLogFilePath, "c:\\AOIServer\\LogRawMessenger\\LogRawMessenger");
        akFileDB.getItem("Stack_Use", &m_ConfigOption.m_bUseStack, 0);
        akFileDB.getItem("Stack_LocalPath", m_ConfigOption.m_strStackLocalPath, "D:\\DIT_ResultData\\Stack");
        akFileDB.getItem("RawMerge_Use", &m_ConfigOption.m_bUseRawMerge, 0);
        akFileDB.getItem("RawMerge_LocalPath", m_ConfigOption.m_strRawMergeLocalPath, "D:\\DIT_ResultData\\RawMerge");
        akFileDB.getItem("Stack_EquipID",m_ConfigOption.m_strStackEquipID, "AAAAA");
        akFileDB.getItem("Stack_Param1",m_ConfigOption.m_strStackParam1, "");
        akFileDB.getItem("Stack_Param2",m_ConfigOption.m_strStackParam2, "");
@@ -263,12 +265,14 @@
        ((CButton*)GetDlgItem(IDC_CHECK_STACKFILEREAD))->SetCheck(m_ConfigOption.m_bUseStack);
        SetDlgItemText(IDC_EDIT_STACK_LOCALSAVEPATH, m_ConfigOption.m_strStackLocalPath);
        ((CButton*)GetDlgItem(IDC_CHECK_RAWMERGEFILEREAD))->SetCheck(m_ConfigOption.m_bUseRawMerge);
        SetDlgItemText(IDC_EDIT_RAWMERGE_LOCALSAVEPATH, m_ConfigOption.m_strRawMergeLocalPath);
        SetDlgItemText(IDC_EDIT_STACK_EQUIPID, m_ConfigOption.m_strStackEquipID);
        SetDlgItemText(IDC_EDIT_STACK_PARAM1, m_ConfigOption.m_strStackParam1);
        SetDlgItemText(IDC_EDIT_STACK_PARAM2, m_ConfigOption.m_strStackParam2);
    }
    //�α� ï¿½ï¿½ï¿½ï¿½ [������ 2018/11/20]
    //로그 ê´€ë ¨ [김태현 2018/11/20]
    {
        CakFileUtil fileutil;
        char strPath[256];
@@ -371,30 +375,30 @@
    if(m_Server.CreateServer(m_ConfigOption.m_nMaxDataNumCell, m_ConfigOption.m_nMaxDataNumDefect) == FALSE)
    {
        AfxMessageBox("���� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½Õ´Ï´ï¿½.");
        AfxMessageBox("서버 ìƒì„± ì‹¤íŒ¨ ì¢…료 í•©ë‹ˆë‹¤.");
        exit(0);
    }
    //���簪 ï¿½ï¿½ï¿½ï¿½ [������ 2019/1/12]
    //현재값 ì ìš© [김태현 2019/1/12]
    {
        CDitGlassRawServer* pServer = (CDitGlassRawServer*) &m_Server;
        CgrmGlassRawData* pRawDataBuffer = &m_GlassRawDataBuffer;
        pRawDataBuffer->ImportGlassRaw(pServer->GetGlassRawInfo(), (char*)pServer->GetGlassData());
    }
    
    //�۾� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2018/11/13]
    //작업 ì“°ë ˆë“œ ìƒì„± [김태현 2018/11/13]
    {
        _beginthread(threadMain, NULL, this);
    }
    
    PostMessage(UM_GLASSRAW_CLIENTMESSAGE);
    return TRUE;  // ï¿½ï¿½Ä¿ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Æ®ï¿½Ñ¿ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ TRUE�� ï¿½ï¿½È¯ï¿½Õ´Ï´ï¿½.
    return TRUE;  // í¬ì»¤ìŠ¤ë¥¼ ì»¨íŠ¸ë¡¤ì— ì„¤ì •하지 ì•Šìœ¼ë©´ TRUE를 ë°˜í™˜í•©ë‹ˆë‹¤.
}
void CDitGlassRawMessengerDlg::OnBnClickedOk()
{
    // TODO: ï¿½ï¿½ï¿½â¿¡ ï¿½ï¿½Æ®ï¿½ï¿½ ï¿½Ë¸ï¿½ Ã³ï¿½ï¿½ï¿½ï¿½ ï¿½Úµå¸¦ ï¿½ß°ï¿½ï¿½Õ´Ï´ï¿½.
    // TODO: ì—¬ê¸°ì— ì»¨íŠ¸ë¡¤ ì•Œë¦¼ ì²˜ë¦¬ê¸° ì½”드를 ì¶”가합니다.
    OnOK();
}
@@ -403,14 +407,14 @@
{
    NOTIFYICONDATA nid;
    nid.cbSize = sizeof(nid);
    nid.hWnd = m_hWnd; // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½Úµï¿½
    nid.uID = IDR_MAINFRAME; // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½Ò½ï¿½ ID
    nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; // ï¿½Ã·ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    nid.uCallbackMessage = UM_TRAYICON_MSG; // ï¿½Ý¹ï¿½Þ½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½Îµï¿½
    nid.hWnd = m_hWnd; // ë©”인 ìœˆë„ìš° í•¸ë“¤
    nid.uID = IDR_MAINFRAME; // ì•„이콘 ë¦¬ì†ŒìФ ID
    nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; // í”Œëž˜ê·¸ ì„¤ì •
    nid.uCallbackMessage = UM_TRAYICON_MSG; // ì½œë°±ë©”시지 ì„¤ì •
    nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); // ì•„이콘 ë¡œë“œ
    char strTitle[256];
    GetWindowText(strTitle, sizeof(strTitle)); // Ä¸ï¿½Ç¹Ù¿ï¿½ ï¿½ï¿½Âµï¿½ ï¿½ï¿½ï¿½Ú¿ï¿½ ï¿½ï¿½ï¿½ï¿½
    GetWindowText(strTitle, sizeof(strTitle)); // ìº¡ì…˜ë°”에 ì¶œë ¥ëœ ë¬¸ìžì—´ ì–»ìŒ
    lstrcpy(nid.szTip, strTitle);
    Shell_NotifyIcon(NIM_ADD, &nid);
    SendMessage(WM_SETICON, (WPARAM)TRUE, (LPARAM)nid.hIcon);
@@ -433,7 +437,7 @@
        GetCursorPos(&pos);
        {
            HMENU hMenu = CreatePopupMenu();
            AppendMenu(hMenu, MF_STRING, 0, "������2��Ʈ��ǰ");
            AppendMenu(hMenu, MF_STRING, 0, "연구소2파트작품");
            AppendMenu(hMenu, MF_STRING, WM_DESTROY, "Exit");
            TrackPopupMenu(hMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, pos.x, pos.y, 0, GetSafeHwnd(), NULL);
        }
@@ -461,19 +465,19 @@
    }
}
// ï¿½ï¿½È­ ï¿½ï¿½ï¿½Ú¿ï¿½ ï¿½Ö¼ï¿½È­ ï¿½ï¿½ï¿½ß¸ï¿½ ï¿½ß°ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½×¸ï¿½ï¿½ï¿½ï¿½ï¿½
//  ï¿½Æ·ï¿½ ï¿½Úµå°¡ ï¿½Ê¿ï¿½ï¿½Õ´Ï´ï¿½. ï¿½ï¿½ï¿½ï¿½/�� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½Ï´ï¿½ MFC ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½Î±×·ï¿½ï¿½ï¿½ ï¿½ï¿½ì¿¡ï¿½ï¿½
//  ï¿½ï¿½ï¿½ï¿½ï¿½Ó¿ï¿½Å©ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½Û¾ï¿½ï¿½ï¿½ ï¿½Úµï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½Õ´Ï´ï¿½.
// ëŒ€í™” ìƒìžì— ìµœì†Œí™” ë‹¨ì¶”를 ì¶”가할 ê²½ìš° ì•„이콘을 ê·¸ë¦¬ë ¤ë©´
//  ì•„래 ì½”드가 í•„요합니다. ë¬¸ì„œ/ë·° ëª¨ë¸ì„ ì‚¬ìš©í•˜ëŠ” MFC ì‘ìš© í”„로그램의 ê²½ìš°ì—ëŠ”
//  í”„레임워크에서 ì´ ìž‘업을 ìžë™ìœ¼ë¡œ ìˆ˜í–‰í•©ë‹ˆë‹¤.
void CDitGlassRawMessengerDlg::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;
@@ -481,7 +485,7 @@
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
        // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½×¸ï¿½ï¿½Ï´ï¿½.
        // ì•„이콘을 ê·¸ë¦½ë‹ˆë‹¤.
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
@@ -490,8 +494,8 @@
    }
}
// ï¿½ï¿½ï¿½ï¿½Ú°ï¿½ ï¿½Ö¼ï¿½È­ï¿½ï¿½ Ã¢ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½È¿ï¿½ Ä¿ï¿½ï¿½ï¿½ï¿½ Ç¥ï¿½ÃµÇµï¿½ï¿½ï¿½ ï¿½Ã½ï¿½ï¿½Û¿ï¿½ï¿½ï¿½
//  ï¿½ï¿½ ï¿½Ô¼ï¿½ï¿½ï¿½ È£ï¿½ï¿½ï¿½Õ´Ï´ï¿½.
// ì‚¬ìš©ìžê°€ ìµœì†Œí™”된 ì°½ì„ ë„는 ë™ì•ˆì— ì»¤ì„œê°€ í‘œì‹œë˜ë„록 ì‹œìŠ¤í…œì—ì„œ
//  ì´ í•¨ìˆ˜ë¥¼ í˜¸ì¶œí•©ë‹ˆë‹¤.
HCURSOR CDitGlassRawMessengerDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
@@ -501,15 +505,15 @@
void CDitGlassRawMessengerDlg::OnDropFiles(HDROP hDropInfo)
{
    int nFiles;
    char szPathName[MAX_PATH];  // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Î¸ï¿½ï¿½ï¿½ ï¿½ï¿½î°£ï¿½ï¿½.
    char szPathName[MAX_PATH];  // íŒŒì¼ ê²½ë¡œë©´ì´ ë“¤ì–´ê°„다.
    CString strFileName;
    // ï¿½ï¿½Óµï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    // ë“œë¡­ëœ íŒŒì¼ì˜ ê°¯ìˆ˜
    nFiles = ::DragQueryFile( hDropInfo, 0xFFFFFFFF, szPathName, MAX_PATH );
    for(int i = nFiles-1 ; i >= 0; i--)  //��ӵ� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Å­ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½é¼­ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Î¸ï¿½ ï¿½Þ¼ï¿½ï¿½ï¿½ ï¿½Ú½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½
    for(int i = nFiles-1 ; i >= 0; i--)  //드롭된 íŒŒì¼ ê°¯ìˆ˜ë§Œí¼ ë£¨í”„를 ëŒë©´ì„œ íŒŒì¼ ê²½ë¡œë¥¼ ë©”세지 ë°•스로 ì¶œë ¥
    {
        // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
        // íŒŒì¼ì˜ ê²½ë¡œ ì–»ì–´ì˜´
        ::DragQueryFile(hDropInfo, i, szPathName, MAX_PATH);
        SetDlgItemText(IDC_EDIT_RAWFILENAME, szPathName);
@@ -601,18 +605,18 @@
    if(pRawInfo->m_nCommandIdxWrite != pRawInfo->m_nCommandIdxRead)
    {
        int nReadIdx = (pRawInfo->m_nCommandIdxRead+1)%COMMAND_MAXCOUNT; //����� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½Æ®ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½Ï³ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ñ¼ï¿½ ï¿½Ð´Â´ï¿½. [������ 2018/11/13]
        int nReadIdx = (pRawInfo->m_nCommandIdxRead+1)%COMMAND_MAXCOUNT; //현재는 ì½ì€ ë§ˆì§€ë§‰ í¬ì¸íŠ¸ìž„ìœ¼ë¡œ í•˜ë‚˜ ì¦ê°€ì‹œì¼œì„œ ì½ëŠ”ë‹¤. [김태현 2018/11/13]
        _grmDitCommand::_grmCommand* pCommand = &pRawInfo->m_nCommandBuffer[nReadIdx];
        AKLOG("Recv Command ID:%d(r%d/w%d)", pCommand->nCommand, nReadIdx, pRawInfo->m_nCommandIdxWrite);
        pRawInfo->m_nCommandIdxRead = nReadIdx;
        if(pCommand->nResult == -1) //��� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ [������ 2018/11/13]
        if(pCommand->nResult == -1) //명령 ìˆ˜í–‰ ì „ [김태현 2018/11/13]
        {
            pCommand->nResult = ProcessCommand( (emGlassRawCommand)pCommand->nCommand, pCommand->strParam );
        }
        else
        {
            //�̹� Ã³ï¿½ï¿½ ï¿½È°ï¿½ [������ 2018/11/13]
            //이미 ì²˜ë¦¬ ëœê±° [김태현 2018/11/13]
        }
        AKLOG("Recv Command ID:%d(r%d/w%d) Process End(Result:%d)", pCommand->nCommand, nReadIdx, pRawInfo->m_nCommandIdxWrite, pCommand->nResult);
@@ -658,7 +662,7 @@
        {
            nResult = m_pGlassRawMaker->SequenceInspectEnd(pRawDataBuffer);
            pServer->GetGlassRawInfo()->m_ServerProcStep = APS_InspectEnd;
            //Stack ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½Þ¸ð¸®¿ï¿½ ï¿½Ý¿ï¿½ ï¿½Ï±ï¿½ ï¿½ï¿½ï¿½ï¿½ Export
            //Stack ì •보를 ê³µìœ ë©”모리에 ë°˜ì˜ í•˜ê¸° ìœ„한 Export
            //pRawDataBuffer->ExportGlassRaw(pServer->GetGlassRawInfo(), (char*)pServer->GetGlassData());
            break;
        }
@@ -677,7 +681,7 @@
    case grcSequenceCustomReviewDataRead:
        {
            nResult = m_pGlassRawMaker->SequenceCustomizeReview(pRawDataBuffer);
            ////Customize Review�� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Æ®
            ////Customize Review를 ìœ„한 ì—…데이트
            //{
            //    memcpy(pServer->GetDefectData(0), pRawDataBuffer->GetDefectData(0), sizeof(_grmDefectData)*pServer->GetGlassRawInfo()->m_nDefectMaxDataNum);
            //    memcpy(pServer->GetCellData(0), pRawDataBuffer->GetCellData(0), sizeof(_grmCellData)*pServer->GetGlassRawInfo()->m_nCellMaxDataNum);
@@ -777,14 +781,14 @@
    
    if(m_pGlassRawMaker) delete m_pGlassRawMaker;
    
    if(m_TrayIcon) // ï¿½ï¿½ï¿½ï¿½ Æ®ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½Ç¾ï¿½ï¿½ï¿½ï¿½ï¿½ È®ï¿½ï¿½
    if(m_TrayIcon) // í˜„재 íŠ¸ë ˆì´ ì•„이콘으로 ì„¤ì •되었는지 í™•인
    {
        NOTIFYICONDATA nid;
        nid.cbSize = sizeof(nid);
        nid.hWnd = m_hWnd; // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½Úµï¿½
        nid.hWnd = m_hWnd; // ë©”인 ìœˆë„ìš° í•¸ë“¤
        nid.uID = IDR_MAINFRAME;
        // ï¿½Û¾ï¿½ Ç¥ï¿½ï¿½ï¿½ï¿½(TaskBar)�� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½Ñ´ï¿½.
        // ìž‘ì—… í‘œì‹œì¤„(TaskBar)의 ìƒíƒœ ì˜ì—­ì— ì•„이콘을 ì‚­ì œí•œë‹¤.
        Shell_NotifyIcon(NIM_DELETE, &nid);
    }
@@ -942,7 +946,7 @@
BOOL CDitGlassRawMessengerDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
    // TODO: ï¿½ï¿½ï¿½â¿¡ Æ¯ï¿½ï¿½È­ï¿½ï¿½ ï¿½Úµå¸¦ ï¿½ß°ï¿½ ï¿½ï¿½/�Ǵ� ï¿½âº» Å¬ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ È£ï¿½ï¿½ï¿½Õ´Ï´ï¿½.
    // TODO: ì—¬ê¸°ì— íŠ¹ìˆ˜í™”ëœ ì½”드를 ì¶”ê°€ ë°/또는 ê¸°ë³¸ í´ëž˜ìŠ¤ë¥¼ í˜¸ì¶œí•©ë‹ˆë‹¤.
    if (m_gridCellInfo.GetSafeHwnd() && wParam == (WPARAM)m_gridCellInfo.GetDlgCtrlID())
    {
        *pResult = 1;
@@ -1264,7 +1268,7 @@
                    CString        str;
                    strItem = _T("          ");
                    // Panel x��, y���� ï¿½Û¶ó½º¿ï¿½ ï¿½Ý´ï¿½ [6/9/2017 bhs]
                    // Panel x축, y축은 ê¸€ë¼ìŠ¤ì™€ ë°˜ëŒ€ [6/9/2017 bhs]
                    if(1)//g_pBasic->GetScanCoordination() == SC_XCoord)
                        str.Format("% 5.3f", (double)pDefect->m_nUMCellX / 1000.0);
                    else
@@ -1287,7 +1291,7 @@
                    CString        str;
                    strItem = _T("          ");
                    // Panel x��, y���� ï¿½Û¶ó½º¿ï¿½ ï¿½Ý´ï¿½ [6/9/2017 bhs]
                    // Panel x축, y축은 ê¸€ë¼ìŠ¤ì™€ ë°˜ëŒ€ [6/9/2017 bhs]
                    if(1)//g_pBasic->GetScanCoordination() == SC_XCoord)
                        str.Format("% 5.3f", (double)pDefect->m_nUMCellY / 1000.0);
                    else
@@ -1345,6 +1349,8 @@
    akFileDB.setItem("Stack_Use", m_ConfigOption.m_bUseStack);
    akFileDB.setItem("Stack_LocalPath", m_ConfigOption.m_strStackLocalPath);
    akFileDB.setItem("RawMerge_Use", m_ConfigOption.m_bUseRawMerge);
    akFileDB.setItem("RawMerge_LocalPath", m_ConfigOption.m_strRawMergeLocalPath);
    akFileDB.setItem("Stack_EquipID", m_ConfigOption.m_strStackEquipID);
    akFileDB.setItem("Stack_Param1",m_ConfigOption.m_strStackParam1);
    akFileDB.setItem("Stack_Param2",m_ConfigOption.m_strStackParam2);
@@ -1439,7 +1445,7 @@
void CDitGlassRawMessengerDlg::OnBnClickedBtnImportRaw()
{
    AKLOG("�̱���� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½Ê¿ä°¡ ï¿½Ö°Ú³ï¿½.. ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½...");
    AKLOG("이기능은 ê°€ê¸‰ì  í•„요가 ìžˆê² ë‚˜.. ì‹¶ìœ¼ë„¤...");
    PostMessage(UM_GLASSRAW_CLIENTMESSAGE);
}
@@ -1524,6 +1530,8 @@
{
    m_ConfigOption.m_bUseStack = ((CButton*)GetDlgItem(IDC_CHECK_STACKFILEREAD))->GetCheck();
    GetDlgItemText(IDC_EDIT_STACK_LOCALSAVEPATH,m_ConfigOption.m_strStackLocalPath, 256);
    m_ConfigOption.m_bUseRawMerge = ((CButton*)GetDlgItem(IDC_CHECK_RAWMERGEFILEREAD))->GetCheck();
    GetDlgItemText(IDC_EDIT_RAWMERGE_LOCALSAVEPATH, m_ConfigOption.m_strRawMergeLocalPath, 256);
    GetDlgItemText(IDC_EDIT_STACK_EQUIPID,m_ConfigOption.m_strStackEquipID, 32);
    GetDlgItemText(IDC_EDIT_STACK_PARAM1,m_ConfigOption.m_strStackParam1, 32);
    GetDlgItemText(IDC_EDIT_STACK_PARAM2,m_ConfigOption.m_strStackParam2, 32);
@@ -1574,13 +1582,13 @@
    
    
        CString str = _T("All(*.*)|*.*|");    // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
        CString str = _T("All(*.*)|*.*|");    // ì„ íƒí•  íŒŒì¼ ì¢…류
        CString File;
        CString strFileList; 
        CFileDialog dlg(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, str, this);
        const int c_cMaxFiles = 400 /*������ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½*/ ;    // ï¿½Þ¸ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ È®ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½Ö¸ï¿½ ï¿½î°³ ï¿½ï¿½ï¿½ï¿½
        const int c_cMaxFiles = 400 /*선택할 íŒŒì¼ ìˆ«ìž*/ ;    // ë©”모리 ë¶€ì¡±í˜„상으로 í™•장 ì•ˆí•´ì£¼ë©´ ëª‡ê°œ ëª»ì”€
        const int c_cbBuffSize = (c_cMaxFiles * (MAX_PATH + 1)) + 1;
        dlg.GetOFN().lpstrFile = strFileList.GetBuffer(c_cbBuffSize);
        dlg.GetOFN().nMaxFile = c_cbBuffSize;
@@ -1591,7 +1599,7 @@
        {
            for(POSITION pos=dlg.GetStartPosition(); pos != NULL;)
            {
                // ï¿½ï¿½Ã¼ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ResetContent
                // ì „체삭제는 ResetContent
                File = dlg.GetNextPathName(pos);
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h
@@ -54,6 +54,9 @@
        char m_strStackEquipID[32];
        char m_strStackParam1[32];
        char m_strStackParam2[32];
        int  m_bUseRawMerge;
        char m_strRawMergeLocalPath[256];
    }m_ConfigOption;
    void WriteConfigFile();
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.cpp
@@ -41,7 +41,8 @@
        || sizeof(_grmBlockData) != m_pGlassRawInfo->m_nSizeOfBlockData
        || sizeof(_grmCellData) != m_pGlassRawInfo->m_nSizeOfCellData
        || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfDefectData
        || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfStackData)
        || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfStackData
        || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfRawMergeData)
    {
        return FALSE;
    }
@@ -51,7 +52,8 @@
    m_pGlassRawInfo->m_nCellMaxDataNum = nCellNum;
    m_pGlassRawInfo->m_nDefectMaxDataNum = nDefectNum;
    m_pGlassRawInfo->m_nStackMaxDataNum = nDefectNum;
    m_pGlassRawInfo->m_nRawMergeMaxDataNum = nDefectNum;
    m_pGlassRawInfo->m_nGlassRawDataSize;
    {
        int nDataNum = 0;
@@ -71,6 +73,9 @@
        m_pGlassRawInfo->m_nStackDataPoint = nDataNum;
        nDataNum += (m_pGlassRawInfo->m_nSizeOfStackData + m_pGlassRawInfo->m_nSizeOfStackData % 4)*nDefectNum;
        
        m_pGlassRawInfo->m_nRawMergeDataPoint = nDataNum;
        nDataNum += (m_pGlassRawInfo->m_nSizeOfRawMergeData + m_pGlassRawInfo->m_nSizeOfRawMergeData % 4)*nDefectNum;
        m_pGlassRawInfo->m_nGlassRawDataSize = nDataNum;
    }
    
@@ -125,6 +130,7 @@
            m_pGlassRawInfo->m_nSizeOfCellData = sizeof(_grmCellData);
            m_pGlassRawInfo->m_nSizeOfDefectData = sizeof(_grmDefectData);
            m_pGlassRawInfo->m_nSizeOfStackData = sizeof(_grmDefectData);
            m_pGlassRawInfo->m_nSizeOfRawMergeData = sizeof(_grmDefectData);
            int bytealign = m_pGlassRawInfo->m_nSizeOfGlassData%4;
        }
@@ -178,6 +184,7 @@
    m_pCellData   = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint];
    m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint];
    m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint];
    m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint];
    return TRUE;
}
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.h
@@ -18,6 +18,7 @@
    _grmCellData*    GetCellData(int nIndex){return &m_pCellData[nIndex];};
    _grmDefectData*    GetDefectData(int nIndex){return &m_pDefectData[nIndex];};
    _grmDefectData*    GetStackData(int nIndex) { return &m_pStackData[nIndex]; };
    _grmDefectData*    GetRawMergeData(int nIndex) { return &m_pRawMergeData[nIndex]; };
    _grmDitGlassRawInfo* GetGlassRawInfo(){return m_pGlassRawInfo;};
@@ -31,7 +32,7 @@
    _grmCellData*   m_pCellData;
    _grmDefectData* m_pDefectData;
    _grmDefectData* m_pStackData;
    _grmDefectData* m_pRawMergeData;
protected:
    HANDLE        m_hMapBasicInfo;
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h
@@ -3,13 +3,13 @@
#include "DitGlassRawStruct.h"
//////////////////////////////////////////////////////////////////////////
// Recipe���� Server�� Inspector�� ï¿½ï¿½ï¿½ï¿½ï¿½Ï´ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
// Recipe에서 Server와 Inspector가 ê³µìœ í•˜ëŠ” ì„¤ì •ì •ë³´.
enum ThreadCount { Thread_1 = 0, Thread_2, Thread_4, Thread_6, Thread_8, Thread_11, Thread_12, Thread_22, Thread_24 };
enum CameraType { CamType_Unknown = 0, CamType_Transfer, CamType_Reflex };
enum ScanCoordinate { SC_XCoord = 0, SC_YCoord };                    // ï¿½ï¿½Äµï¿½ï¿½ï¿½ï¿½. ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Ç¥ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ß¿ï¿½.
enum ScanDirectionEng { SD_Right2Left = 0, SD_Left2Right };            // ï¿½Û¾ï¿½ï¿½Ú°ï¿½ ï¿½ï¿½ ï¿½ï¿½Äµ ï¿½ï¿½ï¿½ï¿½.
enum ScanDirectionIns { SD_Forward = 0, SD_Backward, SD_Unknown };    // Glass ï¿½ï¿½ï¿½ï¿½ Scan ï¿½ï¿½ï¿½ï¿½.
enum ScanType { ST_SingleScan = 0, ST_DualScan };                // SingleScan - ï¿½Ü¹ï¿½ï¿½ï¿½, DualScan - ï¿½ï¿½ï¿½ï¿½ï¿½
enum ScanCoordinate { SC_XCoord = 0, SC_YCoord };                    // ìŠ¤ìº”ë°©í–¥. ê²°í•¨ ì¢Œí‘œ ì—°ì‚°ì‹œ ì¤‘ìš”.
enum ScanDirectionEng { SD_Right2Left = 0, SD_Left2Right };            // ìž‘업자가 ë³¸ ìŠ¤ìº” ë°©í–¥.
enum ScanDirectionIns { SD_Forward = 0, SD_Backward, SD_Unknown };    // Glass ê¸°ì¤€ Scan ë°©í–¥.
enum ScanType { ST_SingleScan = 0, ST_DualScan };                // SingleScan - ë‹¨ë°©í–¥, DualScan - ì–‘ë°©í–¥
enum GlassDirection { GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 };
enum AcqMode { Acq_Unknown = 0, Acq_Grab, Acq_Snap, Acq_Matrox, Acq_Simul };
enum FindBoundary { FB_NotFind = 0, FB_PitchMatching, FB_ManualMatching };
@@ -20,7 +20,7 @@
enum DefectFiltering { Filtering_NO = 0, Filtering_CO, Filtering_Cutoff, Filtering_DXDY, Filtering_TD, Filtering_FALSE };        // Filtering_CO : Cosmic Ray FALSE
enum ALIGN_MARK_CLASSIFY { eAMC_First = 0, eAMC_Second };
//////////////////////////////////////////////////////////////////////////
// Defect�� ï¿½ï¿½ï¿½Ç´ï¿½ Å¸ï¿½Ôµï¿½.
// Defect에 ì‚¬ìš©ë˜ëŠ” íƒ€ìž…들.
enum SERVER_DefectType { DefectType_TBlack = 0, DefectType_TWhite, DefectType_RBlack, DefectType_RWhite, DefectType_BBlack, DefectType_BWhite, DefectType_Unknown };
enum SERVER_DefectSizeType { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra };
enum SERVER_DefectJudgementType { JudgementType_OK = 0, JudgementType_TR, JudgementType_PR, JudgementType_UNKNOWN };
@@ -34,7 +34,7 @@
enum ReKind { Re_Other, Re_TFE_CIRCLE, Re_PI_CONVEX, Re_PI_CONCAVE, Re_PI_1, Re_PI_2, Re_PI_3 };
//choigudal jude fix 2012.03.07
enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_Unknown };//2016.07.13 LHS Judge_Size ï¿½ß°ï¿½
enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_Unknown };//2016.07.13 LHS Judge_Size ì¶”ê°€
enum MAP16_DefectClass { CLASS_C1 = 1, CLASS_C2, CLASS_C3, CLASS_C4, CLASS_C5, CLASS_C6, CLASS_C7, CLASS_C8, CLASS_C9, CLASS_C10, CLASS_C11, CLASS_C12, CLASS_C13, CLASS_C14, CLASS_C15, CLASS_C16 };
enum MAP16_SizeType { SIZE_SS = 0, SIZE_SM, SIZE_SL, SIZE_SOH, SIZE_IDX_MAX };
enum MAP16_PeakType { PEEK_PS = 0, PEEK_PL, PEEK_PH, PEEK_POH, PEAK_IDX_MAX };
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp
@@ -78,7 +78,11 @@
        m_StackResult.StackFileReadStart(pData->GetGlassData()->m_strGlassID);
    }
    if (m_RawMergeResult.getRawMergeUse())
    {
        SendMessageFTPDownloadDataFile(pData->GetGlassData());
        m_RawMergeResult.RawMergeFileReadStart(pData->GetGlassData()->m_strGlassID);
    }
    return TRUE;
}
@@ -121,7 +125,13 @@
    _TimeDelay(5000); // ì´ë¯¸ì§€ ë³µì‚¬ ì‹œê°„ ëŒ€ê¸°
    //210218 CJH - ê²€ì‚¬ ì¢…료시 ê²°ê³¼íŒŒì¼ ë° CCD Image ì—…로드
    SendMessageFTPUploadRaw(pData->GetGlassData());
    SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_AOI_IMAGE);
    BOOL bIsBDI = strcmp((pData->GetGlassData()->m_strLine), _T("BDI")) == 0 ? TRUE : FALSE;
    if (bIsBDI)
    {
        SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_AOI_IMAGE);
    }
    SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_MURA_IMAGE);//0405nwh
    return TRUE;
@@ -1800,23 +1810,18 @@
void CGlassRawCPJT::SendMessageFTPDownloadDataFile( _grmGlassData* pGlassData )
{
    if(pGlassData == NULL) return;
    HWND hWnd = ::FindWindow(NULL, "FTPDownloader");
    HWND hWnd = ::FindWindow(NULL, "FTPUploader");
    if(hWnd == NULL) return;
    char strServerFolder[256] = {};
    char strServerFile[256] = {};
    char strLocalFolder[256] = {};
    char pLocalFile[256] = {};
    char pLocalFile[256] = {};
    char strRTMSFile[32] = {};
    char strServerRawFileSubPath[256] = {};
    char strServer_SubFileName[256] = {};
    //GetFormatDescription(FTPCMD_DATAFILE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData);
    {
        CString strGlassIDOrg = pGlassData->m_strGlassID;
        CString strGlassID = strGlassIDOrg.Left(12);
        sprintf(strServerFolder, "%s", pGlassData->m_strCassetteSequenceNo);
        sprintf(strServerFile, "%s.dat", strGlassID.GetBuffer(0));
        sprintf(strLocalFolder,  "D:\\DIT_ResultData\\DownloadData");
        sprintf(pLocalFile,  "%s.dat", strGlassID.GetBuffer(0));
    }
    GetFormatDescription(FTPCMD_RAWMERGE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, strRTMSFile, strServerRawFileSubPath, strServer_SubFileName, pGlassData);
    CFTPCopyDataParam upParam;
    strcpy(upParam.m_strServer_FolderName,            strServerFolder);
@@ -1829,7 +1834,7 @@
    upParam.m_nSendResultCode                            = FALSE;//m_ctrlResultAck.GetCheck();
    upParam.m_nProcessType                                = CFTPCopyDataParam::FTPProcessType_DownFile;
    // [C-PRJ] Image Upload Define - KHT (2020/11/19)
    upParam.m_nDataType = CFTPCopyDataParam::FTPDataType_Unknown;
    upParam.m_nDataType = CFTPCopyDataParam::FTPDataType_Raw;
    COPYDATASTRUCT cds;
    cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawDownload;
@@ -1971,7 +1976,7 @@
            else
                sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th);
            sprintf(pLocalPath, "%s%s", LOCAL_AOI_IMAGE_PATH, strGlassID.GetBuffer(0));
            sprintf(pLocalPath, "%s%s", NETWORK_AOI_IMAGE_PATH, strGlassID.GetBuffer(0));
            strcpy(pServerFile, "*.*");
            strcpy(pLocalFile, "*.*");
        }
@@ -2129,23 +2134,31 @@
            sprintf(pLocalFile, "%s", strGlassID.GetBuffer(0)); 
        }
        break;
        case FTPCMD_MURA_IMAGE: //0404nwh
        {    //
            /*CTime time = m_tmFileCreateTime;
            sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(),
                strGlassIDLevel5th.GetBuffer(0),
                strGlassIDLevel8th.GetBuffer(0),
                strGlassID.GetBuffer(0));
                            sprintf(pLocalPath, "%s%s", LOCAL_MURA_IMAGE_PATH, strGlassID.GetBuffer(0));
            strcpy(pServerFile, "*.*");
            strcpy(pLocalFile, "*.*");*/
            if (strGlassID.GetLength() > 6)
                sprintf(pServerPath, "\\%s\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th, strGlassID);
            else
                sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th);
    case FTPCMD_RAWMERGE:
    {
        sprintf(pServerPath, "\\%s\\%s\\%s", strProcessID, strStepID,strGlassIDLevel6th.GetBuffer(0)); // ì„œë²„ ê²½ë¡œ í™•인후 ìˆ˜ì • kjg
        sprintf(pServerFile, "%s",strGlassID);
        sprintf(pLocalPath, "%s", m_RawMergeResult.getRawMergeLocalPath());
        sprintf(pLocalFile, "%s", strGlassID.GetBuffer(0));
    }
        break;
    case FTPCMD_MURA_IMAGE: //0404nwh
    {    //
        /*CTime time = m_tmFileCreateTime;
        sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(),
            strGlassIDLevel5th.GetBuffer(0),
            strGlassIDLevel8th.GetBuffer(0),
            strGlassID.GetBuffer(0));
                        sprintf(pLocalPath, "%s%s", LOCAL_MURA_IMAGE_PATH, strGlassID.GetBuffer(0));
        strcpy(pServerFile, "*.*");
        strcpy(pLocalFile, "*.*");*/
        if (strGlassID.GetLength() > 6)
            sprintf(pServerPath, "\\%s\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th, strGlassID);
        else
            sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th);
            sprintf(pLocalPath, "%s%s", LOCAL_MURA_IMAGE_PATH, strGlassID.GetBuffer(0)); 
            strcpy(pServerFile, "*.*");
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.h
@@ -7,6 +7,7 @@
#include "MacroResultFile.h"
#include "CustomizeReview.h"
#include "InterfaceFTP.h"
#include "RawResultReader.h"
class CGlassRawCPJT : public CGlassRawBase, public CInterfaceFTP
{
@@ -75,6 +76,7 @@
    CMacroResultFile m_MuraResultFile; //무라용 ê²°ê³¼íŒŒì¼ ìƒì„±ê´€ë¦¬ [김태현 2018/12/5]
    CStackResultCPJT m_StackResult;
    CRawResultReader m_RawMergeResult;
    BOOL    m_bReviewEndCheck;    // InspectEnd ì‹œì— Raw_im í´ë”에 SubFile ìƒì„± ì•ˆí•˜ê¸° ìœ„í•´ ì‚¬ìš© [ 21-03-18 KJG ]
    CTime    m_tmReviewStart;        
    CTime    m_tmReviewEnd;        
DitGlassRawMessenger/DitGlassRawMessenger/InterfaceFTP.h
@@ -15,7 +15,8 @@
        FTPCMD_MURA_IMAGE            ,
        FTPCMD_STACK                ,
        FTPCMD_LINK                ,
        FTPCMD_End
        FTPCMD_End                ,
        FTPCMD_RAWMERGE
    };
public:
DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp
»õ ÆÄÀÏ
@@ -0,0 +1,396 @@
#include "StdAfx.h"
#include "RawResultReader.h"
#include "akLoggerExt.h"
#include "akCore/akFileDB.h"
#include <process.h>
#include "DitGlassRawClient.h"
#include "GlassRawBase.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#define new DEBUG_NEW
#endif
CRawResultReader::CRawResultReader(void)
{
    m_nThreadStackFileReadFlag = 0;
    m_nProcessState = RPS_StateIdle;
    m_strConfigFile;
    {
        GetModuleFileName(NULL, m_strConfigFile, MAX_PATH);
        char* ext = CakFileUtil::getFileExt(m_strConfigFile);
        strcpy(ext, "ini");
    }
    CreateDirectory("D:\\DIT_ResultData\\RawMerge", NULL);
    m_nProcessState = RPS_StateIdle;
    readOptionFile();
}
CRawResultReader::~CRawResultReader(void)
{
    if (m_nThreadStackFileReadFlag == 1)
    {
        m_nThreadStackFileReadFlag = 2;
        while (m_nThreadStackFileReadFlag != 0)
        {
            Sleep(1);
        }
    }
    m_vecStackDefect.clear();
}
BOOL CRawResultReader::openFile(char* pGlassID)
{
    CString strFileName;
    CDitGlassRawClient    GlassRawClient;
    GlassRawClient.ConnectServer();
    CDitGlassRawClient* pShared = &GlassRawClient;
    _grmDefectData* pGrmStack;
    strFileName.Format("%s\\%s", m_strLocalPath, pGlassID);
    FILE* pf = fopen(strFileName.GetBuffer(0), "r");
    if (pf == NULL)
        return FALSE;
    std::vector<_grmDefectData> vecStackDefect;
    _grmDefectData StackDefect;
    char buffer[2048];
    char* pReadPoint = NULL;
    char *pStr;
    CString tempStr, strRight;
    while (!feof(pf)) //Data ì‹œìž‘
    {
        pStr = fgets(buffer, 2048, pf);
        if (strncmp(buffer, "DATA", 4)) continue;
        if (strlen(buffer) <= 0 || pStr == NULL)
            break;
        if (strncmp(buffer, "DATA DEFECT", 10)) continue;
        //Defect Stack Start
        {
            pReadPoint = buffer;
            int temp;
            CString strtemp;
            pReadPoint = getParsingData(pReadPoint, 4, &temp);
            pReadPoint = getParsingData(pReadPoint, 6, &temp);
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp);
            //Cell ID로 idx ì°¾ê¸°
            {
                tempStr = strtemp.Right(2);
                int nUpper = atoi(tempStr.Left(1));
                nUpper *= 36;
                char ctemp[2];
                strRight = tempStr.Right(1);
                strcpy(ctemp, strRight);
                int nLower = static_cast<int>(ctemp[0]);
                if (48 <= nLower && nLower <= 57)
                    nLower = 43 /* 65+26+17 */ + nLower;
                nLower -= 65;
                StackDefect.m_nCellIdx = nUpper + nLower;
            }
            pReadPoint = getParsingData(pReadPoint, 5, &temp);
            pReadPoint = getParsingData(pReadPoint, 8, &StackDefect.m_nUMCenterAlignX);
            pReadPoint = getParsingData(pReadPoint, 8, &StackDefect.m_nUMCenterAlignY);
            StackDefect.m_nUMCenterAlignY = StackDefect.m_nUMCenterAlignY*-1;
            pReadPoint = getParsingData(pReadPoint, 6, &StackDefect.m_nCellGate);
            pReadPoint = getParsingData(pReadPoint, 6, &StackDefect.m_nCellData);
            pReadPoint = getParsingData(pReadPoint, 4, &StackDefect.m_nPixelSize);
            pReadPoint = getParsingData(pReadPoint, 4, &StackDefect.m_nUMSizeX);
            pReadPoint = getParsingData(pReadPoint, 4, &StackDefect.m_nUMSizeY);
            pReadPoint = getParsingData(pReadPoint, 4, &StackDefect.m_nDefectRScale);
            pReadPoint = getParsingData(pReadPoint, 4, &strtemp); //StackDefect.m_DefectJudgement
            if (strtemp == "OK")
                StackDefect.m_DefectJudgement = Judge_OK;
            else if (strtemp == "TR")
                StackDefect.m_DefectJudgement = Judge_TR;
            else if (strtemp == "PR")
                StackDefect.m_DefectJudgement = Judge_PR;
            else
                StackDefect.m_StackInfo = Stack_Unknown;
            pReadPoint = getParsingData(pReadPoint, 4, &strtemp);
            strncpy(StackDefect.m_strDefectCode, strtemp.GetBuffer(0), 4+1); // Null ë¬¸ìž ë–„문에 +1
            pReadPoint = getParsingData(pReadPoint, 2, &strtemp);
            if (strtemp == "UK")
                StackDefect.m_StackInfo = Stack_Unknown;
            else if (strtemp == "TD")
                StackDefect.m_StackInfo = Stack_TD;
            else if (strtemp == "SD")
                StackDefect.m_StackInfo = Stack_SD;
            else if (strtemp == "PD")
                StackDefect.m_StackInfo = Stack_PD;
            else if (strtemp == "SP")
                StackDefect.m_StackInfo = Stack_SP;
            else
                StackDefect.m_StackInfo = Stack_Unknown;
            pReadPoint = getParsingData(pReadPoint, 2, &StackDefect.m_nStackStepCount);
            pReadPoint = getParsingData(pReadPoint, 60, &strtemp); // Stack Step m_strStackFirst
            strncpy(StackDefect.m_strStackFirst, strtemp.GetBuffer(0), 60);
            pReadPoint = getParsingData(pReadPoint, 16, &strtemp); // ReviewImageName m_strRevImageName
            pReadPoint = getParsingData(pReadPoint, 12, &temp); // ë¯¸ì‚¬ìš©
            pReadPoint = getParsingData(pReadPoint, 12, &temp); // ë¯¸ì‚¬ìš©
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp); // ZoneNum m_sZonePixelCount[i]
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_DefectSizeType
            if (strtemp == "S")
                StackDefect.m_DefectSizeType = SizeType_Small;
            else if (strtemp == "M")
                StackDefect.m_DefectSizeType = SizeType_Mid;
            else if (strtemp == "L")
                StackDefect.m_DefectSizeType = SizeType_Large;
            else if (strtemp == "H")
                StackDefect.m_DefectSizeType = SizeType_Huge;
            else if (strtemp == "U")
                StackDefect.m_DefectSizeType = SizeType_Ultra;
            else
                StackDefect.m_DefectSizeType = SizeType_Small;
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_DefectSubType
            if (strtemp == "MC")
                StackDefect.m_DefectSubType = DefectSubType_MC;
            else if (strtemp == "MD")
                StackDefect.m_DefectSubType = DefectSubType_Mask;
            else if (strtemp == "CD")
                StackDefect.m_DefectSubType = DefectSubType_Common;
            else if (strtemp == "NO")
                StackDefect.m_DefectSubType = DefectSubType_NoDefect;
            else if (strtemp == "N")
                StackDefect.m_DefectSubType = DefectSubType_Normal;
            else
                StackDefect.m_DefectSubType = DefectSubType_Normal;
            pReadPoint = getParsingData(pReadPoint, 12, &temp);//m_ReviewDefect.m_fWsi_ResultData[1]
            pReadPoint = getParsingData(pReadPoint, 12, &temp);//m_ReviewDefect.m_fWsi_ResultData[3]
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//미사용
            pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nLevelSrcMin);//m_nLevelSrcMin
            pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nLevelSrcMax);//m_nLevelSrcMax
            pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nLevelSrcAvg);//m_nLevelSrcAvg
            pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_sDefectPeak);//m_sDefectPeak
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_ReviewDefect.m_strWsi_3DImageFilename
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_strAoiImageName
            strncpy(StackDefect.m_strAoiImageName, strtemp.GetBuffer(0), 12);
            pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nScanIdx);//m_nScanIdx
            pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nCameraID);//m_nCameraID
            pReadPoint = getParsingData(pReadPoint, 12, &temp);//m_nDefectIdx
            pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nLevelRefMin);//m_nLevelRefMin
            pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nLevelRefMax);//m_nLevelRefMax
            pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nLevelRefAvg);//m_nLevelRefAvg
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_ReviewDefect.m_fWsi_ResultData[4]
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_ReviewDefect.m_fWsi_ResultData[5]
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_ReviewDefect.m_fWsi_ResultData[6]
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_nHliLayers
            StackDefect.m_nHliLayers = 0;
            {
                CString   resToken;
                int curPos = 0, idx = 0;
                resToken = strtemp.Tokenize(_T(","), curPos);
                while (resToken != "")
                {
                    int nShiftCnt = atoi(resToken);
                    StackDefect.m_nHliLayers = StackDefect.m_nHliLayers +( 1 << nShiftCnt );
                    resToken = strtemp.Tokenize(_T(","), curPos);
                }
            }
            pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nCompact);//m_nCompact
            pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nThickness);//m_nThickness
            pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nMajor);//m_nMajor
            pReadPoint = getParsingData(pReadPoint, 12, &StackDefect.m_nMinor);//m_nMinor
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_ReviewDefect.m_fWsi_ResultData[0]
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_DefectType
            if (strtemp == "RB")
                StackDefect.m_DefectType = DefectType_RBlack;
            else if (strtemp == "RW")
                StackDefect.m_DefectType = DefectType_RWhite;
            else if (strtemp == "TB")
                StackDefect.m_DefectType = DefectType_TBlack;
            else if (strtemp == "TW")
                StackDefect.m_DefectType = DefectType_TWhite;
            else if (strtemp == "UN")
                StackDefect.m_DefectType = DefectType_Unknown;
            else
                StackDefect.m_DefectType = DefectType_Unknown;
            vecStackDefect.push_back(StackDefect);
        }
    }
    AKLOG("Read RawMerge Size : %d", vecStackDefect.size());
    fclose(pf);
    m_vecStackDefect = vecStackDefect;
    for (int i = 0; i < m_vecStackDefect.size(); i++)
    {
        pGrmStack = pShared->GetRawMergeData(i);
        pGrmStack->clear();
        memcpy(pGrmStack, &m_vecStackDefect[i], sizeof(_grmDefectData));
    }
    pShared->GetGlassData()->m_nRawMergeNum = m_vecStackDefect.size(); // RawMerge
    pShared->GetGlassData()->m_bRawMergeRead = TRUE;
    AKLOG("Import Vector Size : %d", m_vecStackDefect.size());
    return TRUE;
}
char* CRawResultReader::getParsingData(char* pBuf, int nLen, CString* pOutData)
{
    for (int i = nLen - 1; i >= 0; i--)
    {
        if (pBuf[i] != ' ')
        {
            pBuf[i + 1] = 0;
            break;
        }
    }
    *pOutData = pBuf;
    return &pBuf[nLen + 1]; //구분자 ê±´ë„ˆ ë›°ì–´ì„œ ë‹¤ìŒ ì½ì„ í¬ì¸íЏ ë„˜ê²¨ì¤€ë‹¤
}
char* CRawResultReader::getParsingData(char* pBuf, int nLen, short* pOutData)
{
    pBuf[nLen] = 0;
    *pOutData = atoi(pBuf);
    return &pBuf[nLen + 1]; //구분자 ê±´ë„ˆ ë›°ì–´ì„œ ë‹¤ìŒ ì½ì„ í¬ì¸íЏ ë„˜ê²¨ì¤€ë‹¤
}
char* CRawResultReader::getParsingData(char* pBuf, int nLen, int* pOutData)
{
    pBuf[nLen] = 0;
    *pOutData = atoi(pBuf);
    return &pBuf[nLen + 1]; //구분자 ê±´ë„ˆ ë›°ì–´ì„œ ë‹¤ìŒ ì½ì„ í¬ì¸íЏ ë„˜ê²¨ì¤€ë‹¤
}
BOOL CRawResultReader::readOptionFile(char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/)
{
    if (pFileName == NULL) pFileName = m_strConfigFile;
    CakFileDB akFileDB;
    akFileDB.openfile(pFileName);
    akFileDB.getItem("RawMerge_Use", &m_bStackUse, 0);
    akFileDB.getItem("RawMerge_LocalPath", m_strLocalPath, "D:\\DIT_ResultData\\RawMerge");
    if (m_bStackUse && m_nThreadStackFileReadFlag == 0)
    {
        _beginthread(threadResultFileRead, NULL, this);
    }
    return TRUE;
}
void CRawResultReader::threadResultFileRead(void* pArg)
{
    CRawResultReader* pThis = (CRawResultReader*)pArg;
    pThis->m_nThreadStackFileReadFlag = 1;
    int nReadFailCount = 0;
    int nThreadCount = 0;
    CString strGlassID;
    while (pThis->m_nThreadStackFileReadFlag == 1)
    {
        if (pThis->m_nProcessState == RPS_CmdFileRead) //스택파일 ì½ê¸° ìˆ˜í–‰ [김태현 2019/1/12]
        {
            strGlassID = pThis->m_strGlassID;
            pThis->m_nProcessState = RPS_StateFileRead;
            nThreadCount = 0;
            nReadFailCount = 0;
            AKLOG("RawMerge File Read Start : %s\\%s", pThis->m_strLocalPath, strGlassID);
            Sleep(3000);
            while (pThis->m_nProcessState == RPS_StateFileRead && pThis->m_nThreadStackFileReadFlag == 1)
            {
                if ((nThreadCount++ % 20) != 0) //명령 ìˆ˜í–‰ì„ ë¹ ë¥´ê²Œ ê°ì§€ ìœ„한 ì¡°ì¹˜
                {
                    Sleep(50);
                    continue;
                }
                if (pThis->openFile(strGlassID.GetBuffer(0)) == TRUE)
                {
                    pThis->m_nProcessState = RPS_ResultReadOK;
                    AKLOG("RawMerge File Read Complete ");
                    break;
                }
                nReadFailCount++;
                AKLOG("RawMerge File Read Try : %d", nReadFailCount);
                if (nReadFailCount > 10)
                {
                    pThis->m_nProcessState = RPS_ResultReadFail;
                    break;
                }
                Sleep(50);
            }
            if (pThis->m_nProcessState != RPS_ResultReadOK)
            {
                pThis->m_nProcessState = RPS_ResultReadFail;
            }
        }
        if (nReadFailCount)
            Sleep(500);
    }
    pThis->m_nThreadStackFileReadFlag = 0;
}
BOOL CRawResultReader::RawMergeFileReadStart(char* pGlassID)
{
    if (m_nThreadStackFileReadFlag == 0)
    {
        _beginthread(threadResultFileRead, NULL, this);
    }
    if (m_nProcessState == RPS_StateFileRead)
    {
        m_nProcessState = RPS_CmdFileStop;
        while (m_nProcessState == RPS_CmdFileStop) Sleep(0);
    }
    m_strGlassID = pGlassID;
    m_nProcessState = RPS_CmdFileRead;
    return TRUE;
}
BOOL CRawResultReader::RawMergeFileReadStop(BOOL bWait/*=TRUE*/)
{
    /*
    if (bWait == TRUE && m_nProcessState == SPS_StateFileRead)
    {
        m_nProcessState = SPS_CmdFileStop;
        while (m_nProcessState == SPS_CmdFileStop) Sleep(0);
    }
    */
    return TRUE;
}
DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.h
»õ ÆÄÀÏ
@@ -0,0 +1,65 @@
#pragma once
#include "DitGlassRawStruct.h"
#include <vector>
#include "akCore/akFileUtil.h"
class CRawResultReader
{
public:
    CRawResultReader(void);
    virtual ~CRawResultReader(void);
protected:
    enum emReadProcessState
    {
        RPS_StateIdle = 0,
        RPS_StateFileRead, //읽기 ìˆ˜í–‰ ì¤‘
        RPS_ResultReadOK,
        RPS_ResultReadFail,
        RPS_CmdFileRead, //읽기 ëª…ë ¹ ìˆ˜í–‰
        RPS_CmdFileStop, //읽기 ëª…ë ¹ ìˆ˜í–‰ ì¤‘ì§€
        RPS_Num
    };
public:
    void clear()
    {
        m_vecStackDefect.clear();
    }
    BOOL RawMergeFileReadStart(char* pGlassID);
    BOOL RawMergeFileReadStop(BOOL bWait = TRUE);
    BOOL IsRead() { return m_nProcessState == RPS_ResultReadOK ? TRUE : FALSE; }
    int GetDefectNum() { return (int)m_vecStackDefect.size(); }
    _grmDefectData* GetDefect(int i) { return &m_vecStackDefect[i]; }
    BOOL readOptionFile(char* pFileName = NULL);
    BOOL getRawMergeUse() { return m_bStackUse; };
    char* getRawMergeLocalPath() { return m_strLocalPath; };
protected:
    BOOL openFile(char* pGlassID);
    static void threadResultFileRead(void* pArg);
    int    m_nThreadStackFileReadFlag;
protected:
    char m_strConfigFile[MAX_PATH];
    BOOL m_bStackUse;
    char m_strLocalPath[MAX_PATH];
    emReadProcessState m_nProcessState;//-1:읽기실패,0:Idle, 1:읽기성공, 2:읽기시도(읽기중)
    std::vector<_grmDefectData> m_vecStackDefect;
    CString    m_strGlassID;
protected:
    char* getParsingData(char* pBuf, int nLen, CString* pOutData);
    char* getParsingData(char* pBuf, int nLen, int* pOutData);
    char* getParsingData(char* pBuf, int nLen, short* pOutData);
};
DitGlassRawMessenger/DitGlassRawMessenger/resource.h
@@ -50,6 +50,8 @@
#define IDC_EDIT_STACK_PARAM2           1032
#define IDC_BTN_MANUAL_FTPUPLOAD        1033
#define IDC_BTN_FTP_MANUALUPLOAD        1033
#define IDC_CHECK_RAWMERGEFILEREAD      1034
#define IDC_EDIT_RAWMERGE_LOCALSAVEPATH 1035
// Next default values for new objects
// 
DitGlassRawMessenger/Extern/DitGlassRawClient.cpp
@@ -6,11 +6,16 @@
{
    m_hMapBasicInfo = NULL;
    m_hMapGlassData = NULL;
    m_pDitGlassClient =NULL;
    m_pGlassRawInfo = NULL;
    m_pGlassRawData = NULL;
    m_nLastCommandIdx = -1;
    m_pGlassData = NULL;
    m_pBlockData = NULL;
    m_pCellData = NULL;
    m_pDefectData = NULL;
}
CDitGlassRawClient::~CDitGlassRawClient(void)
@@ -100,6 +105,7 @@
    m_pCellData   = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint];
    m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint];
    m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint];
    m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint];
    return TRUE;
}
@@ -132,14 +138,14 @@
    int nCmdId = (m_pGlassRawInfo->m_nCommandIdxWrite+1) % COMMAND_MAXCOUNT;
    if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)//���� ï¿½ï¿½ï¿½Ù´Â°ï¿½ï¿½ï¿½ ï¿½ï¿½Å§ï¿½ï¿½ ï¿½ï¿½ï¿½Û°ï¿½ ï¿½Ñ¹ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½Ò´Ù´Â°ï¿½!! [������ 2018/11/12]
    if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)//둘이 ê°™ë‹¤ëŠ”ê²ƒì€ ì„œí˜ëŸ¬ ë²„퍼가 í•œë°”퀴 ëŒì•˜ë‹¤ëŠ”ê²ƒ!! [김태현 2018/11/12]
    {
        m_pGlassRawInfo->m_nCommandIdxRead++;//���� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½Ï³ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½Ñ´ï¿½. [������ 2018/11/12]
        m_pGlassRawInfo->m_nCommandIdxRead++;//가장 ì˜¤ëž˜ëœ ëª…ë ¹ í•˜ë‚˜ë¥¼ ì‚­ì œí•œë‹¤. [김태현 2018/11/12]
    }
    m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nCommand = (short)nCmd;
    m_pGlassRawInfo->m_nCommandBuffer[nCmdId].strParam;
    m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nResult = -1; //-1������, 0����, 1���� [������ 2018/11/13]
    m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nResult = -1; //-1수행전, 0실패, 1성공 [김태현 2018/11/13]
    m_nLastCommandIdx = m_pGlassRawInfo->m_nCommandIdxWrite = nCmdId;
@@ -166,6 +172,7 @@
    if(isConnect() == FALSE) return FALSE;
    m_pGlassRawInfo->m_ClientProcStep = APS_GlassLoading;
    m_pGlassData->m_bStackRead = FALSE;
    m_pGlassData->m_bRawMergeRead = FALSE;
    return SetCommand(grcSequenceGlassLoading);
}
@@ -197,10 +204,20 @@
    return SetCommand(grcSequenceCustomReviewDataRead);
}
CDitGlassRawClient* CDitGlassRawClient::GetInstance()
{
    if(m_pDitGlassClient == NULL)
    {
        m_pDitGlassClient = new CDitGlassRawClient;
    }
    return m_pDitGlassClient;
}
void CDitGlassRawClient::RemoveReviewDefects()
{
    int nDefectNum = m_pGlassData->m_nDefectNum;
    int nRightDefectNum = 0;//������ ï¿½ï¿½ï¿½ï¿½ï¿½Ê¿ï¿½ ï¿½ï¿½Ä¡ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    int nRightDefectNum = 0;//기준점 ì˜¤ë¥¸ìª½ì— ìœ„치한 ê²°í•¨ ê°¯ìˆ˜
    int nDefectDeleteNum = 0;
    for(int i=nDefectNum-1; i>=0; i--)
    {
@@ -221,3 +238,5 @@
    m_pGlassData->m_nDefectNum = nDefectNum-nDefectDeleteNum;
}
CDitGlassRawClient* CDitGlassRawClient::m_pDitGlassClient;
DitGlassRawMessenger/Extern/DitGlassRawClient.h
@@ -1,6 +1,7 @@
#pragma once
#include "DitGlassRawStruct.h"
#include <afxmt.h>
class CDitGlassRawClient
{
@@ -9,6 +10,8 @@
    ~CDitGlassRawClient(void);
public:
    static CDitGlassRawClient* GetInstance(); //cmark
    BOOL ConnectServer();
    BOOL isConnect(){return m_hMapBasicInfo == NULL || m_hMapGlassData == NULL ? FALSE : TRUE;};
@@ -22,7 +25,7 @@
    BOOL SetReviewComtomize();
    void RemoveReviewDefects();//AOI���� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½Ï°ï¿½, ï¿½ï¿½ï¿½ä¿¡ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ User È¤ï¿½ï¿½ Reflow ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½Ñ´ï¿½.
    void RemoveReviewDefects();//AOI에서 ìƒì„±í•œ ë””펙 ì •보를 ì œì™¸í•˜ê³ , ë¦¬ë·°ì—ì„œ ìƒì„±í•œ User í˜¹ì€ Reflow ê²°í•¨ì„ ì œì™¸í•œë‹¤.
    _grmDitMemInfo*    GetGlassMeminfo(){return (_grmDitMemInfo*)m_pGlassRawInfo;};
    _grmGlassData*    GetGlassData(){return m_pGlassData;};
@@ -30,14 +33,15 @@
    _grmCellData*    GetCellData(int nIndex){return &m_pCellData[nIndex];};
    _grmDefectData*    GetDefectData(int nIndex){return &m_pDefectData[nIndex];};
    _grmDefectData*    GetStackData(int nIndex) { return &m_pStackData[nIndex];};
    _grmDefectData*    GetRawMergeData(int nIndex) { return &m_pRawMergeData[nIndex]; };
    //��� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ [������ 2018/11/12]
    //ê²°ê³¼ íŒŒì¼ ê°•ì œ ì“°ê¸° ëª…ë ¹ [김태현 2018/11/12]
    BOOL WriteAOIRawFile();
    //������� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½Ì³Ê¸ï¿½ ï¿½ï¿½ï¿½Â·ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2018/11/12]
    //결과파일 ê°•ì œ ë°”이너리 í˜•태로 ì“°ê¸° [김태현 2018/11/12]
    BOOL WriteAOIRawBinFile(); 
    //������� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½Ì³Ê¸ï¿½ ï¿½Ð±ï¿½
    //결과파일 ê°•ì œ ë°”이너리 ì½ê¸°
    BOOL ReadAOIRawBinFile();
    BOOL WriteReviewRawBinFile();
@@ -46,14 +50,14 @@
    BOOL ConnectGlassRawInfo();
    BOOL ConnectGlassRawData();
    BOOL SetCommand(emGlassRawCommand nCmd);
    static CDitGlassRawClient* m_pDitGlassClient; //cmark
protected:
    _grmGlassData*  m_pGlassData;
    _grmBlockData*        m_pBlockData;
    _grmCellData*   m_pCellData;
    _grmDefectData* m_pDefectData;
    _grmDefectData* m_pStackData;
    _grmDefectData* m_pRawMergeData;
protected:
    HANDLE        m_hMapBasicInfo;
    HANDLE        m_hMapGlassData;
DitGlassRawMessenger/Extern/DitGlassRawStruct.h
@@ -8,6 +8,7 @@
#define RAWMESSENGER_MAXCAMNUM 30
#define RAWMESSENGER_MAXSCANNUM 20
#define RAWMESSENGER_MAXHLINUM 8
#define MAX_ZONE_NUM 16
@@ -47,7 +48,7 @@
        memset(this, 0, sizeof(_grmGlassData));
    }
    //Glass ï¿½ï¿½ï¿½ï¿½
    //Glass ì •ë³´
    char m_strFileName[64];
    char m_strPath[256];
@@ -56,12 +57,12 @@
    int m_nOriginDirection;                //{ GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 };
    int m_nConerCutDirection;
    int    m_nScanCoordinateY;                //���Ⱑ 0�̸� ï¿½Ï¹ï¿½, 1�̸� Scan������ y��(�� scan������ ï¿½ï¿½ï¿½ï¿½, offline ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½)
    int    m_nScanCoordinateY;                //여기가 0이면 ì¼ë°˜, 1이면 Scan방향이 y축(즉 scan방향이 ë‹¨ì¶•, offline ì„¤ë¹„ ê°™ì€)
    int m_nGlassSizeWidth;
    int m_nGlassSizeHeight;
    //��������
    //설비정보
    char m_strLine[32];
    char m_strEquipType[32];            
    char m_strEquipID[32];                
@@ -74,7 +75,7 @@
    CTime    m_tmReviewLoading;
    CTime    m_tmReviewEnd;
    //�⺻ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
    //기본 ë¬¼ë¥˜ì •ë³´
    char m_strGlassID[32];                //Glass ID
    char m_strPPID[32];                    
    char m_strEPPID[32];                
@@ -91,7 +92,7 @@
    char m_strVCRGlassID[32];
    //���� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    //결함 ê°¯ìˆ˜ ê´€ë¦¬ ë³€ìˆ˜
    int            m_nDefectNumSizeSmall;
    int            m_nDefectNumSizeMid;
    int            m_nDefectNumSizeLarge;
@@ -126,14 +127,14 @@
    int            m_nDefectNumStackSP;
    //ī�޶�/��ĵ ï¿½ï¿½ï¿½ï¿½ [������ 2018/12/5]
    //카메라/스캔 ì •ë³´ [김태현 2018/12/5]
    short        m_nCameraNum;
    short        m_nScanNum;
    unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM];
    unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM];
    unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM];
    unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
    unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
    unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
    //����� ï¿½ï¿½ï¿½ï¿½ um[������ 2018/12/10]
    //얼라인 ì •ë³´ um[김태현 2018/12/10]
    double    m_nAlignCcdTheta;
    double    m_nAlignCcdShitftX;
    double    m_nAlignCcdShitftY;
@@ -147,7 +148,7 @@
    char    m_strAlignSecond[64];
//     char    m_strAlignPath[256];
    //CSOT�� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2018/12/5]
    //CSOT용 ë¬¼ë¥˜ ì •ë³´ [김태현 2018/12/5]
    char m_strCassetteSequenceNo[16];
    char m_strOwnerCode[16];            //2. OWNER_CODE
    char m_strOwnerType[16];            //3. OWNER_TYPE
@@ -162,7 +163,7 @@
    char m_strGroupID[16];                //14.GROUP_ID
    char m_cAutoSampleFlag;                //15.AUTOSAMPLEFLAG
    // CPRJ�� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    // CPRJ용 ë¬¼ë¥˜ ì •ë³´
    char m_strProdType[3];
    char m_strBatchID[13];
    char m_strPairHPanelID[13];
@@ -188,17 +189,19 @@
    BYTE m_nGlassDataBitSignal[4];
    bool m_bJob_end;  
    //201217 CJH - ï¿½ï¿½ï¿½ï¿½ Defect Review ï¿½ï¿½ï¿½ï¿½
    //201217 CJH - ì°ì€ Defect Review ê°œìˆ˜
    int m_nReviewNum;
    //201221 CJH - ï¿½Ä½ï¿½ï¿½ï¿½ Stack ï¿½ï¿½ï¿½
    //201221 CJH - íŒŒì‹±í•œ Stack ê²°ê³¼
    int m_nStackNum;
    BOOL m_bStackRead;
    //210203 CJH - CutOff ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½
    int m_nRawMergeNum;
    BOOL m_bRawMergeRead;
    //210203 CJH - CutOff ëŒ€ìƒ ê²°í•¨ ìˆ˜
    int m_nCutOffDefectNum;
    //210323 CJH - Server/Frame Shrink ï¿½ï¿½ï¿½ï¿½ ï¿½ß°ï¿½
    //210323 CJH - Server/Frame Shrink ì •ë³´ ì¶”ê°€
    char m_strShrinked[6];
    //210326 CJH - RAW ï¿½Ô·ï¿½ Defect ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ë¿©ï¿½ï¿½
    //210326 CJH - RAW ìž…ë ¥ Defect ìˆ˜ëŸ‰ ìƒí•œ ì‚¬ìš©ì—¬ë¶€
    BOOL m_bRawCutoff;
};
@@ -222,7 +225,7 @@
    }
    int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; };
    int                        m_nCellID;                            //1. PANEL_ID
    short                    m_nModelIdx;                // ï¿½ï¿½ ï¿½ï¿½Â° ï¿½ï¿½ï¿½Î°ï¿½?
    short                    m_nModelIdx;                // ëª‡ ë²ˆì§¸ ëª¨ë¸ì¸ê°€?
    char                    m_strCellName[32];
    int                        m_rectCellLeft;
@@ -235,7 +238,7 @@
    int                        m_nJudgeGlade;
    //���� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    //결함 ê°¯ìˆ˜ ê´€ë¦¬ ë³€ìˆ˜
    int            m_nDefectNumSizeSmall;
    int            m_nDefectNumSizeMid;
    int            m_nDefectNumSizeLarge;
@@ -259,7 +262,7 @@
    char        m_strProImage[32];
    char        m_strAvgGray_0[12];
    char        m_strPortion_0[12];
    //kyh Mura Data ï¿½ß°ï¿½ 0622
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_0[12];
    char        m_strAvgAmp_0[12];
    char        m_strFFTVar_0[12];
@@ -269,7 +272,7 @@
    char        m_strAvgGray_1[12];
    char        m_strPortion_1[12];
    //kyh Mura Data ï¿½ß°ï¿½ 0622
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_1[12];
    char        m_strAvgAmp_1[12];
    char        m_strFFTVar_1[12];
@@ -279,7 +282,7 @@
    char        m_strAvgGray_2[12];
    char        m_strPortion_2[12];
    //kyh Mura Data ï¿½ß°ï¿½ 0622
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_2[12];
    char        m_strAvgAmp_2[12];
    char        m_strFFTVar_2[12];
@@ -289,7 +292,7 @@
    char        m_strAvgGray_3[12];
    char        m_strPortion_3[12];
    //kyh Mura Data ï¿½ß°ï¿½ 0622
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_3[12];
    char        m_strAvgAmp_3[12];
    char        m_strFFTVar_3[12];
@@ -308,17 +311,17 @@
    int            m_nReflowResult[8];            // 0: Reflow X 1: Reflow OK 2: Reflow NG
    // Filtering�� Stack�� ï¿½ï¿½
    // Filtering된 Stack별 ìˆ˜
    int            m_nDefectTDCount;
    int            m_nDefectSDCount;
    int            m_nDefectPDCount;
    int            m_nDefectSPCount;
    // Gate/Data ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    // Gate/Data ì´ ê°¯ìˆ˜
    int            m_nGateNum;
    int            m_nDataNum;
    // 210129 CJH - Cell Origin ï¿½ï¿½ï¿½ï¿½
    // 210129 CJH - Cell Origin ë°©í–¥
    int            m_nCellXDir;
    int            m_nCellYDir;
};
@@ -331,10 +334,10 @@
    }
    //////////////////////////////////////////////////////////////////////////
    //���⼭ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2019/1/19]
    //여기서 ë¶€í„° ë¦¬ë·° ì˜ì—­ [김태현 2019/1/19]
    ditRaw::ReviewPlanType            m_nPlanType    ;    
    int            m_nResultCode;  //0:None, 1:Success
    int            m_nShotIndex; //���� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2018/12/5]
    int            m_nShotIndex; //리뷰 ì°ì€ ìˆœë²ˆ [김태현 2018/12/5]
    int            m_nModuleIndex;
    int            m_nMagnificIndex;
    float        m_fManification;
@@ -343,15 +346,15 @@
    char        m_strRevImagePath[256];
    //////////////////////////////////////////////////////////////////////////
    // Measure ï¿½ï¿½ï¿½ï¿½
    // Measure ì˜ì—­
    int            m_nMeasure_Index;
    int            m_nMeasure_ResultCode; //0:None, 1:Success
    float        m_fMesure_ResultData[8];    // 0:Type, 1:ShiftX, 2:ShiftY
    //////////////////////////////////////////////////////////////////////////
    // WSI����
    // WSI영역
    int            m_nWsi_ResultCode; //0:None, 1:Success
    int            m_nWsi_Type;                                    // ï¿½Ô¸ï¿½ / ï¿½ï¿½ï¿½ï¿½
    int            m_nWsi_Type;                                    // í•¨ëª° / ëŒê¸°
    float        m_fWsi_ResultData[8];            // 0:Type, 1:Height(um), 2:Width
    char        m_strWsi_2DImageFilename[256];
    char        m_strWsi_3DImageFilename[256]; 
@@ -359,14 +362,14 @@
    int            m_nWsi_pReflowResultData[8];
    double        m_dWsi_DamDistance;
    double        m_dWsiMmMotorX;                                // WSI ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Ç¥ 20180223 HJH
    double        m_dWsiMmMotorX;                                // WSI ëª¨í„° ì¢Œí‘œ 20180223 HJH
    double        m_dWsiMmMotorY;
    float        m_fWsiManification;                            // WSI ï¿½ï¿½ï¿½ï¿½
    float        m_fWsiManification;                            // WSI ë°°ìœ¨
    //////////////////////////////////////////////////////////////////////////
    // Reflow ï¿½ï¿½ï¿½ï¿½
    // Reflow ì˜ì—­
    int            m_nReflow_Index;
    int            m_nReflow_ResultCode; //0:None, // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Line�� ï¿½ï¿½ï¿½ï¿½. 3 ï¿½Ì¸ï¿½ : DAM2 Reflow ï¿½ï¿½ï¿½ï¿½, 4~5 : DAM1 Reflow ï¿½ï¿½ï¿½ï¿½, 6 : no Reflow ï¿½ï¿½ï¿½ï¿½ / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side
    int            m_nReflow_ResultCode; //0:None, // ê²€ì¶œí•œ Line의 ê°œìˆ˜. 3 ë¯¸ë§Œ : DAM2 Reflow íŒì •, 4~5 : DAM1 Reflow íŒì •, 6 : no Reflow íŒì • / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side
    float        m_fReflow_LinePosData[8];    
    int            m_nReflow_Side;
    int            m_nReflow_InspectionMode;
@@ -382,108 +385,108 @@
    short            m_nDefectID;
    short            m_nCameraID;
    short            m_nScanIdx;
    //short            m_nDefectIdx;                // Ä«ï¿½Þ¶ó¿¡¼ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½Îµï¿½ï¿½ï¿½
    int                m_nDefectIdx;                // Ä«ï¿½Þ¶ó¿¡¼ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½Îµï¿½ï¿½ï¿½ 201207 CJH - ï¿½Ú¸ï¿½ ï¿½ï¿½ ï¿½ï¿½Ä§. int������ ï¿½ï¿½ï¿½ï¿½
    //short            m_nDefectIdx;                // ì¹´ë©”라에서의 ê²°í•¨ ì¸ë±ìФ
    int                m_nDefectIdx;                // ì¹´ë©”라에서의 ê²°í•¨ ì¸ë±ìФ 201207 CJH - ìžë¦¿ ìˆ˜ ë„˜ì¹¨. int형으로 ë³€ê²½
    int                m_nPixelConv;                // pixel ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Ç¥
    int                m_nPixelScan;                // pixel ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Ç¥
    int                m_nPixelConv;                // pixel ë‹¨ìœ„ ì¢Œí‘œ
    int                m_nPixelScan;                // pixel ë‹¨ìœ„ ì¢Œí‘œ
    short                            m_nPixelSize;                // ï¿½ï¿½ï¿½ï¿½Å©ï¿½ï¿½        ---------------------------------PS
    short/*SERVER_DefectType*/        m_DefectType;                // ï¿½ï¿½ï¿½ï¿½ Å¸ï¿½ï¿½    ---------------------------------DT
    short/*SERVER_DefectSubType*/    m_DefectSubType;            // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
    short/*SERVER_DefectBDType*/    m_DefectBDType;                // ï¿½ï¿½ï¿½ï¿½ Å¸ï¿½ï¿½ - Bright, Dark, Both
    short                            m_nPixelSize;                // ê²°í•¨í¬ê¸°        ---------------------------------PS
    short/*SERVER_DefectType*/        m_DefectType;                // ê²°í•¨ íƒ€ìž…    ---------------------------------DT
    short/*SERVER_DefectSubType*/    m_DefectSubType;            // ê²°í•¨ì˜ íŒì •상태.
    short/*SERVER_DefectBDType*/    m_DefectBDType;                // ê²°í•¨ íƒ€ìž… - Bright, Dark, Both
    short            m_sPixelWidth;                // ï¿½È¼ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½Êºï¿½
    short            m_sPixelHeight;                // ï¿½È¼ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    short            m_nLevelSrcMin;                // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ Min    -----------------------------SN
    short            m_nLevelSrcMax;                // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ Max    -----------------------------SX
    short            m_nLevelSrcAvg;                // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ Avg    -----------------------------SA
    short            m_nLevelRefMin;                // ï¿½ñ±³´ï¿½ï¿½ ï¿½ï¿½ï¿½ Min    -------------------------RN
    short            m_nLevelRefMax;                // ï¿½ñ±³´ï¿½ï¿½ ï¿½ï¿½ï¿½ Max    -------------------------RX
    short            m_nLevelRefAvg;                // ï¿½ñ±³´ï¿½ï¿½ ï¿½ï¿½ï¿½ Avg    -------------------------RA
    short            m_nLevelDiffMin;            // ï¿½ï¿½ï¿½ï¿½ Min    ---------------------------------DN
    short            m_nLevelDiffMax;            // ï¿½ï¿½ï¿½ï¿½ Max    ---------------------------------DX
    short            m_nLevelDiffAvg;            // ï¿½ï¿½ï¿½ï¿½ Avg    ---------------------------------DA
    short            m_sPixelWidth;                // í”½ì…€ë‹¨ìœ„ ê²°í•¨ ë„ˆë¹„
    short            m_sPixelHeight;                // í”½ì…€ë‹¨ìœ„ ê²°í•¨ ë†’이
    short            m_nLevelSrcMin;                // ê²°í•¨ ë°ê¸° Min    -----------------------------SN
    short            m_nLevelSrcMax;                // ê²°í•¨ ë°ê¸° Max    -----------------------------SX
    short            m_nLevelSrcAvg;                // ê²°í•¨ ë°ê¸° Avg    -----------------------------SA
    short            m_nLevelRefMin;                // ë¹„교대상 ë°ê¸° Min    -------------------------RN
    short            m_nLevelRefMax;                // ë¹„교대상 ë°ê¸° Max    -------------------------RX
    short            m_nLevelRefAvg;                // ë¹„교대상 ë°ê¸° Avg    -------------------------RA
    short            m_nLevelDiffMin;            // ë¹„교차 Min    ---------------------------------DN
    short            m_nLevelDiffMax;            // ë¹„교차 Max    ---------------------------------DX
    short            m_nLevelDiffAvg;            // ë¹„교차 Avg    ---------------------------------DA
    int                m_nDefectRScale;            // ï¿½È¼ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½    -------------------------RS
    short            m_sThreshold;                // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Threshold
    short            m_sThresholdAvg;            // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Threshold AVG
    short            m_sDefectPeak;                // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Peak.
    short            m_sDefectLevel;                // (DiffAvg - Th) BOE 8G ï¿½ï¿½Ã»ï¿½ï¿½ï¿½ï¿½
    int                m_nDefectRScale;            // í”½ì…€ë‹¨ìœ„ ê²°í•¨ ë†’이    -------------------------RS
    short            m_sThreshold;                // ê²°í•¨ì„ ê²€ì¶œí•  ë•Œì˜ Threshold
    short            m_sThresholdAvg;            // ê²°í•¨ì„ ê²€ì¶œí•  ë•Œì˜ Threshold AVG
    short            m_sDefectPeak;                // ê²°í•¨ì˜ Peak.
    short            m_sDefectLevel;                // (DiffAvg - Th) BOE 8G ìš”청사항
    int                m_nPixelGlassStart;            // Glass ï¿½ï¿½ï¿½ï¿½ ï¿½È¼ï¿½
    int                m_nPixelGlassStart;            // Glass ì‹œìž‘ í”½ì…€
    short            m_sDefectLoc;
    short            m_sZoneClassPixelCount[16];
    short            m_sZonePixelCount[16];    // Zone�� ï¿½ï¿½ï¿½ï¿½ Pixel ï¿½ï¿½
    short            m_sZoneValueMin[16];    // Zone�� ï¿½ï¿½ï¿½ï¿½ Min
    short            m_sZoneValueMax[16];    // Zone�� ï¿½ï¿½ï¿½ï¿½ Max
    short            m_sZoneValueAvg[16];    // Zone�� ï¿½ï¿½ï¿½ï¿½ Avg
    short            m_sZonePixelCount[16];    // Zone별 ê²°í•¨ Pixel ìˆ˜
    short            m_sZoneValueMin[16];    // Zone별 ê²°í•¨ Min
    short            m_sZoneValueMax[16];    // Zone별 ê²°í•¨ Max
    short            m_sZoneValueAvg[16];    // Zone별 ê²°í•¨ Avg
    short            m_sZonePixelPercent[16];    // --------------------------------------Z0~ZF
    //210127 CJH - Zone�� Source Gray ï¿½Ô·ï¿½
    short            m_sZoneValueSrcMin[16];    // Zone�� Source Min
    short            m_sZoneValueSrcMax[16];    // Zone�� Source Max
    short            m_sZoneValueSrcAvg[16]; // Zone�� Source Avg
    //210127 CJH - Zone별 Source Gray ìž…ë ¥
    short            m_sZoneValueSrcMin[16];    // Zone별 Source Min
    short            m_sZoneValueSrcMax[16];    // Zone별 Source Max
    short            m_sZoneValueSrcAvg[16]; // Zone별 Source Avg
    int                m_nUMOriginX;                // um���� x��ǥ (��������)
    int                m_nUMOriginY;                // um���� y��ǥ (��������)
    int                m_nUMCenterAlignX;            // um���� X��ǥ (Glass Center ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½Îºï¿½ï¿½ï¿½ ï¿½ï¿½)
    int                m_nUMCenterAlignY;            // um���� Y��ǥ (Glass Center ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½Îºï¿½ï¿½ï¿½ ï¿½ï¿½)
    int                m_nUMCenterX;                // um���� X��ǥ (Glass Center ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½Îºï¿½ï¿½ï¿½ ï¿½ï¿½)
    int                m_nUMCenterY;                // um���� Y��ǥ (Glass Center ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½Îºï¿½ï¿½ï¿½ ï¿½ï¿½)
    int                m_nUMSizeX;                    // um���� X Å©ï¿½ï¿½    -----------------------------UX
    int                m_nUMSizeY;                    // um���� Y Å©ï¿½ï¿½    -----------------------------UY
    int                m_nUMSize;                    // um���� Å©ï¿½ï¿½.
    CRect            m_RectUM;                    // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ç°¢ï¿½ï¿½.
    int                m_nUMOriginX;                // um단위 x좌표 (원점기준)
    int                m_nUMOriginY;                // um단위 y조표 (원점기준)
    int                m_nUMCenterAlignX;            // um단위 X좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • í›„)
    int                m_nUMCenterAlignY;            // um단위 Y좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • í›„)
    int                m_nUMCenterX;                // um단위 X좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • ì „)
    int                m_nUMCenterY;                // um단위 Y좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • ì „)
    int                m_nUMSizeX;                    // um단위 X í¬ê¸°    -----------------------------UX
    int                m_nUMSizeY;                    // um단위 Y í¬ê¸°    -----------------------------UY
    int                m_nUMSize;                    // um단위 í¬ê¸°.
    CRect            m_RectUM;                    // ë””펙 ì„¼í„° ê¸°ì¤€ ì‚¬ê°í˜•.
    short/*SERVER_DefectSizeType*/    m_DefectSizeType;            // ï¿½ï¿½ï¿½ï¿½ Å©ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½enum SERVER_DefectSizeType        { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra };
    short/*SERVER_DefectPeakType*/    m_DefectPeakType;            // Peak�� ï¿½ï¿½ï¿½ï¿½.
    short/*Judgement*/                m_DefectJudgement;            // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½.
    BOOL                    m_bDefectCutoff;            // ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½(TRUE= Cutoff, FALSE)
    short/*MAP16_DefectClass*/        m_DefectClass;                // BOE Defect Class 16��� ï¿½ï¿½ï¿½ï¿½
    int                m_nPadRegionIdx;            // PAD ï¿½ï¿½ï¿½ï¿½ ï¿½Îµï¿½ï¿½ï¿½
    short/*SERVER_DefectSizeType*/    m_DefectSizeType;            // ê²°í•¨ í¬ê¸° ì¢…류enum SERVER_DefectSizeType        { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra };
    short/*SERVER_DefectPeakType*/    m_DefectPeakType;            // Peak의 ì¢…류.
    short/*Judgement*/                m_DefectJudgement;            // ê²°í•¨ íŒì •.
    BOOL                    m_bDefectCutoff;            // ì»· ì˜¤í”„ ë””펙(TRUE= Cutoff, FALSE)
    short/*MAP16_DefectClass*/        m_DefectClass;                // BOE Defect Class 16등분 êµ¬ë¶„
    int                m_nPadRegionIdx;            // PAD ì˜ì—­ ì¸ë±ìФ
    int                m_nUMCellX;                    // ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ x ï¿½ï¿½Ç¥
    int                m_nUMCellY;                    // ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ y ï¿½ï¿½Ç¥
    short            m_nModelIdx;                // ï¿½ï¿½ ï¿½ï¿½Â° ï¿½ï¿½ï¿½Î°ï¿½?
    short            m_nCellIdx;                    // ï¿½ï¿½ï¿½Â° ï¿½ï¿½ï¿½Î°ï¿½?
    short            m_nCellGate;                // ï¿½ï¿½ï¿½ï¿½ Gate����(����� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½)
    short            m_nCellData;                // ï¿½ï¿½ï¿½ï¿½ Data����(����� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½)
    short            m_nCellGateAlign;            // ï¿½ï¿½ï¿½ï¿½ Gate����(����� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½)
    short            m_nCellDataAlign;            // ï¿½ï¿½ï¿½ï¿½ Data����(����� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½)
    int                m_nUMCellX;                    // ì…€ ì›ì  ê¸°ì¤€ x ì¢Œí‘œ
    int                m_nUMCellY;                    // ì…€ ì›ì  ê¸°ì¤€ y ì¢Œí‘œ
    short            m_nModelIdx;                // ëª‡ ë²ˆì§¸ ëª¨ë¸ì¸ê°€?
    short            m_nCellIdx;                    // ëª‡ë²ˆì§¸ ì…€ì¸ê°€?
    short            m_nCellGate;                // ì…€ë³„ Gate라인(얼라인 ë³´ì • ì „)
    short            m_nCellData;                // ì…€ë³„ Data라인(얼라인 ë³´ì • ì „)
    short            m_nCellGateAlign;            // ì…€ë³„ Gate라인(얼라인 ë³´ì • í›„)
    short            m_nCellDataAlign;            // ì…€ë³„ Data라인(얼라인 ë³´ì • í›„)
    int                m_nUMShotX;                    // ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ X��ǥ
    int                m_nUMShotY;                    // ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Y��ǥ
    short            m_nMaskDefectIdx;            // ï¿½ï¿½ Glass���� ï¿½ß°ßµï¿½ ï¿½ï¿½ï¿½ï¿½Å©ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½Îµï¿½ï¿½ï¿½.
    short            m_nShotIdx;                    // ï¿½ë±¤ï¿½ï¿½ ï¿½ï¿½È£
    short            m_nMatchShotCount;            // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½Å© ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½.
    short            m_nMatchMaxSize;            // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½Å© ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Å« ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Å©ï¿½ï¿½.
    int                m_nUMShotX;                    // ìƒ· ê¸°ì¤€ X좌표
    int                m_nUMShotY;                    // ìƒ· ê¸°ì¤€ Y좌표
    short            m_nMaskDefectIdx;            // í•œ Glass에서 ë°œê²¬ëœ ë§ˆìŠ¤í¬ê²°í•¨ ë¬¶ìŒì˜ ì¸ë±ìФ.
    short            m_nShotIdx;                    // ë…¸ê´‘샷 ë²ˆí˜¸
    short            m_nMatchShotCount;            // ë™ì¼í•œ ë§ˆìŠ¤í¬ ê²°í•¨ì˜ ìˆ˜.
    short            m_nMatchMaxSize;            // ë™ì¼í•œ ë§ˆìŠ¤í¬ ì¤‘ ê°€ìž¥ í° ê²°í•¨ì˜ í¬ê¸°.
    short            m_nRepeatCount;                // ï¿½ï¿½ï¿½Ó°ï¿½ï¿½Ô¹ß°ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ç¥ ï¿½Ýºï¿½ï¿½ï¿½
    short            m_nRepeatCount;                // ì—°ì†ê²°í•¨ë°œê²¬ìœ„한 ë™ì¼ì¢Œí‘œ ë°˜ë³µìˆ˜
    short            m_nMaskRepeatCount;
    int                m_StackInfo;                // Stack Flag
    BOOL            m_bRealStack;                // Stack ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ TD(TRUE) ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½Í¸ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ TD(FALSE)������ ï¿½ï¿½ ï¿½Ö´ï¿½.
    short            m_nStackStepCount;            // Stack ï¿½ï¿½
    short            m_nStackColorIdx;            // Color�� ï¿½ï¿½ï¿½ï¿½ï¿½Ï´ï¿½ ï¿½Îµï¿½ï¿½ï¿½.
    BOOL            m_bRealStack;                // Stack ë¨¸ì§€ì— ì˜í•œ TD(TRUE) ì¸ì§€, í•„터링에 ì˜í•œ TD(FALSE)구분할 ìˆ˜ ìžˆë‹¤.
    short            m_nStackStepCount;            // Stack ìˆ˜
    short            m_nStackColorIdx;            // Color를 ì„ íƒí•˜ëŠ” ì¸ë±ìФ.
    //CString            m_strStackStep[CFDEFECT_STACKCOUNT];            // Stack Step.
    char            m_strStackFirst[60];            // Stack Step. //201221 CJH - ï¿½Ö´ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ 60bytes
    char            m_strUnitID[16];                // ï¿½ï¿½ï¿½Ö¾ï¿½ï¿½Ìµï¿½
    char            m_strStackFirst[60];            // Stack Step. //201221 CJH - ìµœëŒ€ ì‚¬ì´ì¦ˆ 60bytes
    char            m_strUnitID[16];                // ìœ ë‹›ì•„이디
    int                m_ClassificationType;                // enum ClassificationType            { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI�� TFE�� ï¿½ß°ï¿½ ï¿½Ð·ï¿½  ï¿½Ë°ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½.
    int                m_nAtomWidth;                // TFE ï¿½ï¿½ ï¿½Êºï¿½
    int                m_nAtomHeight;                // TFE ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    short/*ReKind*/            m_DefectKind;                // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    int                m_ClassificationType;                // enum ClassificationType            { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI나 TFE등 ì¶”ê°€ ë¶„류  ì•Œê³ ë¦¬ì¦˜ ì ìš© ê²°ê³¼.
    int                m_nAtomWidth;                // TFE í•µ ë„ˆë¹„
    int                m_nAtomHeight;                // TFE í•µ ë†’이
    short/*ReKind*/            m_DefectKind;                // ê²°í•¨ ì¢…류
    char            m_strDefectCode[32];            // Defect Code
    BOOL            m_bMergeState;                // Merge Status
    char            m_strAoiImageName[256];            // Defect Image Name(CCD Image)
    int                m_nDefectMerge;        // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    int                m_nDefectMerge;        // í˜„재 ë””펙의 ë¨¸ì§€ ì—¬ë¶€
    int                m_nPixelSizeOrigin;
    int                m_nScratchRatio;
    int                m_nDensity;            // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½Ðµï¿½ [2017.8.2 bhs]
    int                m_nDensity;            // ì›í˜• ê²°í•¨ êµ¬ë¶„을 ìœ„한 ë°€ë„ [2017.8.2 bhs]
    char            m_strDefectName[16];
    char            m_strDefectType[16];
@@ -491,16 +494,16 @@
    double            m_dScanResolution;
    double            m_dConvResolution;
    int                m_nAngle;                    // ï¿½ï¿½ï¿½ï¿½
    int                m_nMajor;                    // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½(Long)
    int                m_nMinor;                    // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½(Short)
    int                m_nCompact;                    // Blob ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½Ï´ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½Ì¿ï¿½ Blob ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    int                m_nThickness;                // Blob ï¿½ï¿½ï¿½Ì¿ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ (Area / Major)
    int                m_nAngle;                    // ê°ë„
    int                m_nMajor;                    // ìž¥ì¶• ê¸¸ì´(Long)
    int                m_nMinor;                    // ë‹¨ì¶• ê¸¸ì´(Short)
    int                m_nCompact;                    // Blob ìž¥ì¶•을 ì§€ë¦„으로 í•˜ëŠ” ì›ì˜ ë„“이와 Blob ë„“이의 ë¹„율
    int                m_nThickness;                // Blob ë„“이와 ìž¥ì¶•의 ë¹„율 (Area / Major)
    
    short            m_nHliLevelIdx;                // ï¿½ï¿½ ï¿½ï¿½Â° ï¿½ï¿½ï¿½ï¿½(�)�ΰ�?
    int                m_nHliLayers;                // ï¿½Ø´ï¿½ï¿½ï¿½Ô¿ï¿½ ï¿½ï¿½ï¿½Ôµï¿½ ï¿½ï¿½ï¿½Ì¾ï¿½ bitó��
    short            m_nHliLevelIdx;                // ëª‡ ë²ˆì§¸ ë ˆë²¨(채널)인가?
    int                m_nHliLayers;                // í•´ë‹¹ê²°í•¨ì— í¬í•¨ëœ ë ˆì´ì–´ bit처리
    BOOL            m_bShrinked;                //210323 CJH - Frame Shrink ï¿½ï¿½ï¿½ï¿½ ï¿½ß°ï¿½
    BOOL            m_bShrinked;                //210323 CJH - Frame Shrink ì •ë³´ ì¶”ê°€
    char            m_strAoiImagePath[255];
    char            m_strReviewImagePath[255];
@@ -511,7 +514,6 @@
    int                m_nAlignRectRight;
    //���� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2019/1/19]
    _grmDefectReviewData m_ReviewDefect;
};
@@ -556,32 +558,35 @@
struct _grmDitMemInfo
{
    //���� ï¿½Þ¸ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2018/11/12]
    //공유 ë©”모리 ìƒì„±í•  ê³µê°„ ê²°ì • [김태현 2018/11/12]
    size_t m_nGlassRawDataSize;
    int m_nGlassMaxDataNum;
    int m_nBlockMaxDataNum;
    int m_nCellMaxDataNum;
    int m_nDefectMaxDataNum;
    int m_nStackMaxDataNum;
    int m_nRawMergeMaxDataNum;
    //Char ï¿½ï¿½ï¿½ï¿½ ï¿½Ú·á°¡ ï¿½Ö´ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Ä¡ [������ 2018/11/12]
    //Char ê¸°ì¤€ ìžë£Œê°€ ìžˆëŠ” ì‹œìž‘ ìœ„치 [김태현 2018/11/12]
    int m_nGlassDataPoint;
    int m_nBlockDataPoint;
    int m_nCellDataPoint;
    int m_nDefectDataPoint;
    int m_nStackDataPoint;
    int m_nRawMergeDataPoint;
    int m_nSizeOfGlassData;
    int m_nSizeOfBlockData;
    int m_nSizeOfCellData;
    int m_nSizeOfDefectData;
    int m_nSizeOfStackData;
    int m_nSizeOfRawMergeData;
};
struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand
{
    size_t m_nGlassLoadingCount;
    emAOIProcStep m_ClientProcStep; //AOI, Review�� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½
    emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)�� Ã³ï¿½ï¿½ ï¿½Ï·ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½
    emAOIProcStep m_ClientProcStep; //AOI, Review가 ë³´ë‚¸ ëª…ë ¹
    emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)가 ì²˜ë¦¬ ì™„료 í•œ ëª…ë ¹
};
class CgrmGlassRawData
@@ -668,7 +673,7 @@
    {
        if(pInfo == NULL || pData == NULL) return FALSE;
        if(1) //new type //�޸� ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Å©ï¿½â¿¡ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
        if(1) //new type //메모리 ì´ ê³µê°„ í¬ê¸°ì— ìƒê´€ì—†ì´
        {
            //if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE;
ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp
@@ -41,7 +41,8 @@
        || sizeof(_grmBlockData) != m_pGlassRawInfo->m_nSizeOfBlockData
        || sizeof(_grmCellData) != m_pGlassRawInfo->m_nSizeOfCellData
        || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfDefectData
        || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfStackData)
        || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfStackData
        || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfRawMergeData)
    {
        return FALSE;
    }
@@ -51,7 +52,8 @@
    m_pGlassRawInfo->m_nCellMaxDataNum = nCellNum;
    m_pGlassRawInfo->m_nDefectMaxDataNum = nDefectNum;
    m_pGlassRawInfo->m_nStackMaxDataNum = nDefectNum;
    m_pGlassRawInfo->m_nRawMergeMaxDataNum = nDefectNum;
    m_pGlassRawInfo->m_nGlassRawDataSize;
    {
        int nDataNum = 0;
@@ -71,6 +73,9 @@
        m_pGlassRawInfo->m_nStackDataPoint = nDataNum;
        nDataNum += (m_pGlassRawInfo->m_nSizeOfStackData + m_pGlassRawInfo->m_nSizeOfStackData % 4)*nDefectNum;
        
        m_pGlassRawInfo->m_nRawMergeDataPoint = nDataNum;
        nDataNum += (m_pGlassRawInfo->m_nSizeOfRawMergeData + m_pGlassRawInfo->m_nSizeOfRawMergeData % 4)*nDefectNum;
        m_pGlassRawInfo->m_nGlassRawDataSize = nDataNum;
    }
    
@@ -125,6 +130,7 @@
            m_pGlassRawInfo->m_nSizeOfCellData = sizeof(_grmCellData);
            m_pGlassRawInfo->m_nSizeOfDefectData = sizeof(_grmDefectData);
            m_pGlassRawInfo->m_nSizeOfStackData = sizeof(_grmDefectData);
            m_pGlassRawInfo->m_nSizeOfRawMergeData = sizeof(_grmDefectData);
            int bytealign = m_pGlassRawInfo->m_nSizeOfGlassData%4;
        }
@@ -178,6 +184,7 @@
    m_pCellData   = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint];
    m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint];
    m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint];
    m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint];
    return TRUE;
}
ReviewHistory/ReveiwHistory/DitGlassRawServer.h
@@ -18,6 +18,7 @@
    _grmCellData*    GetCellData(int nIndex){return &m_pCellData[nIndex];};
    _grmDefectData*    GetDefectData(int nIndex){return &m_pDefectData[nIndex];};
    _grmDefectData*    GetStackData(int nIndex) { return &m_pStackData[nIndex]; };
    _grmDefectData*    GetRawMergeData(int nIndex) { return &m_pRawMergeData[nIndex]; };
    _grmDitGlassRawInfo* GetGlassRawInfo(){return m_pGlassRawInfo;};
@@ -31,7 +32,7 @@
    _grmCellData*   m_pCellData;
    _grmDefectData* m_pDefectData;
    _grmDefectData* m_pStackData;
    _grmDefectData* m_pRawMergeData;
protected:
    HANDLE        m_hMapBasicInfo;
ReviewHistory/ReveiwHistory/DitGlassRawStruct.h
@@ -8,6 +8,7 @@
#define RAWMESSENGER_MAXCAMNUM 30
#define RAWMESSENGER_MAXSCANNUM 20
#define RAWMESSENGER_MAXHLINUM 8
#define MAX_ZONE_NUM 16
@@ -47,7 +48,7 @@
        memset(this, 0, sizeof(_grmGlassData));
    }
    //Glass ï¿½ï¿½ï¿½ï¿½
    //Glass ì •ë³´
    char m_strFileName[64];
    char m_strPath[256];
@@ -56,12 +57,12 @@
    int m_nOriginDirection;                //{ GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 };
    int m_nConerCutDirection;
    int    m_nScanCoordinateY;                //���Ⱑ 0�̸� ï¿½Ï¹ï¿½, 1�̸� Scan������ y��(�� scan������ ï¿½ï¿½ï¿½ï¿½, offline ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½)
    int    m_nScanCoordinateY;                //여기가 0이면 ì¼ë°˜, 1이면 Scan방향이 y축(즉 scan방향이 ë‹¨ì¶•, offline ì„¤ë¹„ ê°™ì€)
    int m_nGlassSizeWidth;
    int m_nGlassSizeHeight;
    //��������
    //설비정보
    char m_strLine[32];
    char m_strEquipType[32];            
    char m_strEquipID[32];                
@@ -74,7 +75,7 @@
    CTime    m_tmReviewLoading;
    CTime    m_tmReviewEnd;
    //�⺻ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
    //기본 ë¬¼ë¥˜ì •ë³´
    char m_strGlassID[32];                //Glass ID
    char m_strPPID[32];                    
    char m_strEPPID[32];                
@@ -91,7 +92,7 @@
    char m_strVCRGlassID[32];
    //���� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    //결함 ê°¯ìˆ˜ ê´€ë¦¬ ë³€ìˆ˜
    int            m_nDefectNumSizeSmall;
    int            m_nDefectNumSizeMid;
    int            m_nDefectNumSizeLarge;
@@ -126,14 +127,14 @@
    int            m_nDefectNumStackSP;
    //ī�޶�/��ĵ ï¿½ï¿½ï¿½ï¿½ [������ 2018/12/5]
    //카메라/스캔 ì •ë³´ [김태현 2018/12/5]
    short        m_nCameraNum;
    short        m_nScanNum;
    unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM];
    unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM];
    unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM];
    unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
    unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
    unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
    //����� ï¿½ï¿½ï¿½ï¿½ um[������ 2018/12/10]
    //얼라인 ì •ë³´ um[김태현 2018/12/10]
    double    m_nAlignCcdTheta;
    double    m_nAlignCcdShitftX;
    double    m_nAlignCcdShitftY;
@@ -147,7 +148,7 @@
    char    m_strAlignSecond[64];
//     char    m_strAlignPath[256];
    //CSOT�� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2018/12/5]
    //CSOT용 ë¬¼ë¥˜ ì •ë³´ [김태현 2018/12/5]
    char m_strCassetteSequenceNo[16];
    char m_strOwnerCode[16];            //2. OWNER_CODE
    char m_strOwnerType[16];            //3. OWNER_TYPE
@@ -162,7 +163,7 @@
    char m_strGroupID[16];                //14.GROUP_ID
    char m_cAutoSampleFlag;                //15.AUTOSAMPLEFLAG
    // CPRJ�� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    // CPRJ용 ë¬¼ë¥˜ ì •ë³´
    char m_strProdType[3];
    char m_strBatchID[13];
    char m_strPairHPanelID[13];
@@ -188,17 +189,19 @@
    BYTE m_nGlassDataBitSignal[4];
    bool m_bJob_end;  
    //201217 CJH - ï¿½ï¿½ï¿½ï¿½ Defect Review ï¿½ï¿½ï¿½ï¿½
    //201217 CJH - ì°ì€ Defect Review ê°œìˆ˜
    int m_nReviewNum;
    //201221 CJH - ï¿½Ä½ï¿½ï¿½ï¿½ Stack ï¿½ï¿½ï¿½
    //201221 CJH - íŒŒì‹±í•œ Stack ê²°ê³¼
    int m_nStackNum;
    BOOL m_bStackRead;
    //210203 CJH - CutOff ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½
    int m_nRawMergeNum;
    BOOL m_bRawMergeRead;
    //210203 CJH - CutOff ëŒ€ìƒ ê²°í•¨ ìˆ˜
    int m_nCutOffDefectNum;
    //210323 CJH - Server/Frame Shrink ï¿½ï¿½ï¿½ï¿½ ï¿½ß°ï¿½
    //210323 CJH - Server/Frame Shrink ì •ë³´ ì¶”ê°€
    char m_strShrinked[6];
    //210326 CJH - RAW ï¿½Ô·ï¿½ Defect ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ë¿©ï¿½ï¿½
    //210326 CJH - RAW ìž…ë ¥ Defect ìˆ˜ëŸ‰ ìƒí•œ ì‚¬ìš©ì—¬ë¶€
    BOOL m_bRawCutoff;
};
@@ -222,7 +225,7 @@
    }
    int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; };
    int                        m_nCellID;                            //1. PANEL_ID
    short                    m_nModelIdx;                // ï¿½ï¿½ ï¿½ï¿½Â° ï¿½ï¿½ï¿½Î°ï¿½?
    short                    m_nModelIdx;                // ëª‡ ë²ˆì§¸ ëª¨ë¸ì¸ê°€?
    char                    m_strCellName[32];
    int                        m_rectCellLeft;
@@ -235,7 +238,7 @@
    int                        m_nJudgeGlade;
    //���� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    //결함 ê°¯ìˆ˜ ê´€ë¦¬ ë³€ìˆ˜
    int            m_nDefectNumSizeSmall;
    int            m_nDefectNumSizeMid;
    int            m_nDefectNumSizeLarge;
@@ -259,7 +262,7 @@
    char        m_strProImage[32];
    char        m_strAvgGray_0[12];
    char        m_strPortion_0[12];
    //kyh Mura Data ï¿½ß°ï¿½ 0622
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_0[12];
    char        m_strAvgAmp_0[12];
    char        m_strFFTVar_0[12];
@@ -269,7 +272,7 @@
    char        m_strAvgGray_1[12];
    char        m_strPortion_1[12];
    //kyh Mura Data ï¿½ß°ï¿½ 0622
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_1[12];
    char        m_strAvgAmp_1[12];
    char        m_strFFTVar_1[12];
@@ -279,7 +282,7 @@
    char        m_strAvgGray_2[12];
    char        m_strPortion_2[12];
    //kyh Mura Data ï¿½ß°ï¿½ 0622
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_2[12];
    char        m_strAvgAmp_2[12];
    char        m_strFFTVar_2[12];
@@ -289,7 +292,7 @@
    char        m_strAvgGray_3[12];
    char        m_strPortion_3[12];
    //kyh Mura Data ï¿½ß°ï¿½ 0622
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_3[12];
    char        m_strAvgAmp_3[12];
    char        m_strFFTVar_3[12];
@@ -308,17 +311,17 @@
    int            m_nReflowResult[8];            // 0: Reflow X 1: Reflow OK 2: Reflow NG
    // Filtering�� Stack�� ï¿½ï¿½
    // Filtering된 Stack별 ìˆ˜
    int            m_nDefectTDCount;
    int            m_nDefectSDCount;
    int            m_nDefectPDCount;
    int            m_nDefectSPCount;
    // Gate/Data ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    // Gate/Data ì´ ê°¯ìˆ˜
    int            m_nGateNum;
    int            m_nDataNum;
    // 210129 CJH - Cell Origin ï¿½ï¿½ï¿½ï¿½
    // 210129 CJH - Cell Origin ë°©í–¥
    int            m_nCellXDir;
    int            m_nCellYDir;
};
@@ -331,10 +334,10 @@
    }
    //////////////////////////////////////////////////////////////////////////
    //���⼭ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2019/1/19]
    //여기서 ë¶€í„° ë¦¬ë·° ì˜ì—­ [김태현 2019/1/19]
    ditRaw::ReviewPlanType            m_nPlanType    ;    
    int            m_nResultCode;  //0:None, 1:Success
    int            m_nShotIndex; //���� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2018/12/5]
    int            m_nShotIndex; //리뷰 ì°ì€ ìˆœë²ˆ [김태현 2018/12/5]
    int            m_nModuleIndex;
    int            m_nMagnificIndex;
    float        m_fManification;
@@ -343,15 +346,15 @@
    char        m_strRevImagePath[256];
    //////////////////////////////////////////////////////////////////////////
    // Measure ï¿½ï¿½ï¿½ï¿½
    // Measure ì˜ì—­
    int            m_nMeasure_Index;
    int            m_nMeasure_ResultCode; //0:None, 1:Success
    float        m_fMesure_ResultData[8];    // 0:Type, 1:ShiftX, 2:ShiftY
    //////////////////////////////////////////////////////////////////////////
    // WSI����
    // WSI영역
    int            m_nWsi_ResultCode; //0:None, 1:Success
    int            m_nWsi_Type;                                    // ï¿½Ô¸ï¿½ / ï¿½ï¿½ï¿½ï¿½
    int            m_nWsi_Type;                                    // í•¨ëª° / ëŒê¸°
    float        m_fWsi_ResultData[8];            // 0:Type, 1:Height(um), 2:Width
    char        m_strWsi_2DImageFilename[256];
    char        m_strWsi_3DImageFilename[256]; 
@@ -359,14 +362,14 @@
    int            m_nWsi_pReflowResultData[8];
    double        m_dWsi_DamDistance;
    double        m_dWsiMmMotorX;                                // WSI ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Ç¥ 20180223 HJH
    double        m_dWsiMmMotorX;                                // WSI ëª¨í„° ì¢Œí‘œ 20180223 HJH
    double        m_dWsiMmMotorY;
    float        m_fWsiManification;                            // WSI ï¿½ï¿½ï¿½ï¿½
    float        m_fWsiManification;                            // WSI ë°°ìœ¨
    //////////////////////////////////////////////////////////////////////////
    // Reflow ï¿½ï¿½ï¿½ï¿½
    // Reflow ì˜ì—­
    int            m_nReflow_Index;
    int            m_nReflow_ResultCode; //0:None, // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Line�� ï¿½ï¿½ï¿½ï¿½. 3 ï¿½Ì¸ï¿½ : DAM2 Reflow ï¿½ï¿½ï¿½ï¿½, 4~5 : DAM1 Reflow ï¿½ï¿½ï¿½ï¿½, 6 : no Reflow ï¿½ï¿½ï¿½ï¿½ / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side
    int            m_nReflow_ResultCode; //0:None, // ê²€ì¶œí•œ Line의 ê°œìˆ˜. 3 ë¯¸ë§Œ : DAM2 Reflow íŒì •, 4~5 : DAM1 Reflow íŒì •, 6 : no Reflow íŒì • / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side
    float        m_fReflow_LinePosData[8];    
    int            m_nReflow_Side;
    int            m_nReflow_InspectionMode;
@@ -382,108 +385,108 @@
    short            m_nDefectID;
    short            m_nCameraID;
    short            m_nScanIdx;
    //short            m_nDefectIdx;                // Ä«ï¿½Þ¶ó¿¡¼ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½Îµï¿½ï¿½ï¿½
    int                m_nDefectIdx;                // Ä«ï¿½Þ¶ó¿¡¼ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½Îµï¿½ï¿½ï¿½ 201207 CJH - ï¿½Ú¸ï¿½ ï¿½ï¿½ ï¿½ï¿½Ä§. int������ ï¿½ï¿½ï¿½ï¿½
    //short            m_nDefectIdx;                // ì¹´ë©”라에서의 ê²°í•¨ ì¸ë±ìФ
    int                m_nDefectIdx;                // ì¹´ë©”라에서의 ê²°í•¨ ì¸ë±ìФ 201207 CJH - ìžë¦¿ ìˆ˜ ë„˜ì¹¨. int형으로 ë³€ê²½
    int                m_nPixelConv;                // pixel ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Ç¥
    int                m_nPixelScan;                // pixel ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Ç¥
    int                m_nPixelConv;                // pixel ë‹¨ìœ„ ì¢Œí‘œ
    int                m_nPixelScan;                // pixel ë‹¨ìœ„ ì¢Œí‘œ
    short                            m_nPixelSize;                // ï¿½ï¿½ï¿½ï¿½Å©ï¿½ï¿½        ---------------------------------PS
    short/*SERVER_DefectType*/        m_DefectType;                // ï¿½ï¿½ï¿½ï¿½ Å¸ï¿½ï¿½    ---------------------------------DT
    short/*SERVER_DefectSubType*/    m_DefectSubType;            // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
    short/*SERVER_DefectBDType*/    m_DefectBDType;                // ï¿½ï¿½ï¿½ï¿½ Å¸ï¿½ï¿½ - Bright, Dark, Both
    short                            m_nPixelSize;                // ê²°í•¨í¬ê¸°        ---------------------------------PS
    short/*SERVER_DefectType*/        m_DefectType;                // ê²°í•¨ íƒ€ìž…    ---------------------------------DT
    short/*SERVER_DefectSubType*/    m_DefectSubType;            // ê²°í•¨ì˜ íŒì •상태.
    short/*SERVER_DefectBDType*/    m_DefectBDType;                // ê²°í•¨ íƒ€ìž… - Bright, Dark, Both
    short            m_sPixelWidth;                // ï¿½È¼ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½Êºï¿½
    short            m_sPixelHeight;                // ï¿½È¼ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    short            m_nLevelSrcMin;                // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ Min    -----------------------------SN
    short            m_nLevelSrcMax;                // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ Max    -----------------------------SX
    short            m_nLevelSrcAvg;                // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ Avg    -----------------------------SA
    short            m_nLevelRefMin;                // ï¿½ñ±³´ï¿½ï¿½ ï¿½ï¿½ï¿½ Min    -------------------------RN
    short            m_nLevelRefMax;                // ï¿½ñ±³´ï¿½ï¿½ ï¿½ï¿½ï¿½ Max    -------------------------RX
    short            m_nLevelRefAvg;                // ï¿½ñ±³´ï¿½ï¿½ ï¿½ï¿½ï¿½ Avg    -------------------------RA
    short            m_nLevelDiffMin;            // ï¿½ï¿½ï¿½ï¿½ Min    ---------------------------------DN
    short            m_nLevelDiffMax;            // ï¿½ï¿½ï¿½ï¿½ Max    ---------------------------------DX
    short            m_nLevelDiffAvg;            // ï¿½ï¿½ï¿½ï¿½ Avg    ---------------------------------DA
    short            m_sPixelWidth;                // í”½ì…€ë‹¨ìœ„ ê²°í•¨ ë„ˆë¹„
    short            m_sPixelHeight;                // í”½ì…€ë‹¨ìœ„ ê²°í•¨ ë†’이
    short            m_nLevelSrcMin;                // ê²°í•¨ ë°ê¸° Min    -----------------------------SN
    short            m_nLevelSrcMax;                // ê²°í•¨ ë°ê¸° Max    -----------------------------SX
    short            m_nLevelSrcAvg;                // ê²°í•¨ ë°ê¸° Avg    -----------------------------SA
    short            m_nLevelRefMin;                // ë¹„교대상 ë°ê¸° Min    -------------------------RN
    short            m_nLevelRefMax;                // ë¹„교대상 ë°ê¸° Max    -------------------------RX
    short            m_nLevelRefAvg;                // ë¹„교대상 ë°ê¸° Avg    -------------------------RA
    short            m_nLevelDiffMin;            // ë¹„교차 Min    ---------------------------------DN
    short            m_nLevelDiffMax;            // ë¹„교차 Max    ---------------------------------DX
    short            m_nLevelDiffAvg;            // ë¹„교차 Avg    ---------------------------------DA
    int                m_nDefectRScale;            // ï¿½È¼ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½    -------------------------RS
    short            m_sThreshold;                // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Threshold
    short            m_sThresholdAvg;            // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Threshold AVG
    short            m_sDefectPeak;                // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Peak.
    short            m_sDefectLevel;                // (DiffAvg - Th) BOE 8G ï¿½ï¿½Ã»ï¿½ï¿½ï¿½ï¿½
    int                m_nDefectRScale;            // í”½ì…€ë‹¨ìœ„ ê²°í•¨ ë†’이    -------------------------RS
    short            m_sThreshold;                // ê²°í•¨ì„ ê²€ì¶œí•  ë•Œì˜ Threshold
    short            m_sThresholdAvg;            // ê²°í•¨ì„ ê²€ì¶œí•  ë•Œì˜ Threshold AVG
    short            m_sDefectPeak;                // ê²°í•¨ì˜ Peak.
    short            m_sDefectLevel;                // (DiffAvg - Th) BOE 8G ìš”청사항
    int                m_nPixelGlassStart;            // Glass ï¿½ï¿½ï¿½ï¿½ ï¿½È¼ï¿½
    int                m_nPixelGlassStart;            // Glass ì‹œìž‘ í”½ì…€
    short            m_sDefectLoc;
    short            m_sZoneClassPixelCount[16];
    short            m_sZonePixelCount[16];    // Zone�� ï¿½ï¿½ï¿½ï¿½ Pixel ï¿½ï¿½
    short            m_sZoneValueMin[16];    // Zone�� ï¿½ï¿½ï¿½ï¿½ Min
    short            m_sZoneValueMax[16];    // Zone�� ï¿½ï¿½ï¿½ï¿½ Max
    short            m_sZoneValueAvg[16];    // Zone�� ï¿½ï¿½ï¿½ï¿½ Avg
    short            m_sZonePixelCount[16];    // Zone별 ê²°í•¨ Pixel ìˆ˜
    short            m_sZoneValueMin[16];    // Zone별 ê²°í•¨ Min
    short            m_sZoneValueMax[16];    // Zone별 ê²°í•¨ Max
    short            m_sZoneValueAvg[16];    // Zone별 ê²°í•¨ Avg
    short            m_sZonePixelPercent[16];    // --------------------------------------Z0~ZF
    //210127 CJH - Zone�� Source Gray ï¿½Ô·ï¿½
    short            m_sZoneValueSrcMin[16];    // Zone�� Source Min
    short            m_sZoneValueSrcMax[16];    // Zone�� Source Max
    short            m_sZoneValueSrcAvg[16]; // Zone�� Source Avg
    //210127 CJH - Zone별 Source Gray ìž…ë ¥
    short            m_sZoneValueSrcMin[16];    // Zone별 Source Min
    short            m_sZoneValueSrcMax[16];    // Zone별 Source Max
    short            m_sZoneValueSrcAvg[16]; // Zone별 Source Avg
    int                m_nUMOriginX;                // um���� x��ǥ (��������)
    int                m_nUMOriginY;                // um���� y��ǥ (��������)
    int                m_nUMCenterAlignX;            // um���� X��ǥ (Glass Center ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½Îºï¿½ï¿½ï¿½ ï¿½ï¿½)
    int                m_nUMCenterAlignY;            // um���� Y��ǥ (Glass Center ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½Îºï¿½ï¿½ï¿½ ï¿½ï¿½)
    int                m_nUMCenterX;                // um���� X��ǥ (Glass Center ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½Îºï¿½ï¿½ï¿½ ï¿½ï¿½)
    int                m_nUMCenterY;                // um���� Y��ǥ (Glass Center ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½Îºï¿½ï¿½ï¿½ ï¿½ï¿½)
    int                m_nUMSizeX;                    // um���� X Å©ï¿½ï¿½    -----------------------------UX
    int                m_nUMSizeY;                    // um���� Y Å©ï¿½ï¿½    -----------------------------UY
    int                m_nUMSize;                    // um���� Å©ï¿½ï¿½.
    CRect            m_RectUM;                    // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ç°¢ï¿½ï¿½.
    int                m_nUMOriginX;                // um단위 x좌표 (원점기준)
    int                m_nUMOriginY;                // um단위 y조표 (원점기준)
    int                m_nUMCenterAlignX;            // um단위 X좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • í›„)
    int                m_nUMCenterAlignY;            // um단위 Y좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • í›„)
    int                m_nUMCenterX;                // um단위 X좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • ì „)
    int                m_nUMCenterY;                // um단위 Y좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • ì „)
    int                m_nUMSizeX;                    // um단위 X í¬ê¸°    -----------------------------UX
    int                m_nUMSizeY;                    // um단위 Y í¬ê¸°    -----------------------------UY
    int                m_nUMSize;                    // um단위 í¬ê¸°.
    CRect            m_RectUM;                    // ë””펙 ì„¼í„° ê¸°ì¤€ ì‚¬ê°í˜•.
    short/*SERVER_DefectSizeType*/    m_DefectSizeType;            // ï¿½ï¿½ï¿½ï¿½ Å©ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½enum SERVER_DefectSizeType        { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra };
    short/*SERVER_DefectPeakType*/    m_DefectPeakType;            // Peak�� ï¿½ï¿½ï¿½ï¿½.
    short/*Judgement*/                m_DefectJudgement;            // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½.
    BOOL                    m_bDefectCutoff;            // ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½(TRUE= Cutoff, FALSE)
    short/*MAP16_DefectClass*/        m_DefectClass;                // BOE Defect Class 16��� ï¿½ï¿½ï¿½ï¿½
    int                m_nPadRegionIdx;            // PAD ï¿½ï¿½ï¿½ï¿½ ï¿½Îµï¿½ï¿½ï¿½
    short/*SERVER_DefectSizeType*/    m_DefectSizeType;            // ê²°í•¨ í¬ê¸° ì¢…류enum SERVER_DefectSizeType        { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra };
    short/*SERVER_DefectPeakType*/    m_DefectPeakType;            // Peak의 ì¢…류.
    short/*Judgement*/                m_DefectJudgement;            // ê²°í•¨ íŒì •.
    BOOL                    m_bDefectCutoff;            // ì»· ì˜¤í”„ ë””펙(TRUE= Cutoff, FALSE)
    short/*MAP16_DefectClass*/        m_DefectClass;                // BOE Defect Class 16등분 êµ¬ë¶„
    int                m_nPadRegionIdx;            // PAD ì˜ì—­ ì¸ë±ìФ
    int                m_nUMCellX;                    // ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ x ï¿½ï¿½Ç¥
    int                m_nUMCellY;                    // ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ y ï¿½ï¿½Ç¥
    short            m_nModelIdx;                // ï¿½ï¿½ ï¿½ï¿½Â° ï¿½ï¿½ï¿½Î°ï¿½?
    short            m_nCellIdx;                    // ï¿½ï¿½ï¿½Â° ï¿½ï¿½ï¿½Î°ï¿½?
    short            m_nCellGate;                // ï¿½ï¿½ï¿½ï¿½ Gate����(����� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½)
    short            m_nCellData;                // ï¿½ï¿½ï¿½ï¿½ Data����(����� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½)
    short            m_nCellGateAlign;            // ï¿½ï¿½ï¿½ï¿½ Gate����(����� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½)
    short            m_nCellDataAlign;            // ï¿½ï¿½ï¿½ï¿½ Data����(����� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½)
    int                m_nUMCellX;                    // ì…€ ì›ì  ê¸°ì¤€ x ì¢Œí‘œ
    int                m_nUMCellY;                    // ì…€ ì›ì  ê¸°ì¤€ y ì¢Œí‘œ
    short            m_nModelIdx;                // ëª‡ ë²ˆì§¸ ëª¨ë¸ì¸ê°€?
    short            m_nCellIdx;                    // ëª‡ë²ˆì§¸ ì…€ì¸ê°€?
    short            m_nCellGate;                // ì…€ë³„ Gate라인(얼라인 ë³´ì • ì „)
    short            m_nCellData;                // ì…€ë³„ Data라인(얼라인 ë³´ì • ì „)
    short            m_nCellGateAlign;            // ì…€ë³„ Gate라인(얼라인 ë³´ì • í›„)
    short            m_nCellDataAlign;            // ì…€ë³„ Data라인(얼라인 ë³´ì • í›„)
    int                m_nUMShotX;                    // ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ X��ǥ
    int                m_nUMShotY;                    // ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Y��ǥ
    short            m_nMaskDefectIdx;            // ï¿½ï¿½ Glass���� ï¿½ß°ßµï¿½ ï¿½ï¿½ï¿½ï¿½Å©ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½Îµï¿½ï¿½ï¿½.
    short            m_nShotIdx;                    // ï¿½ë±¤ï¿½ï¿½ ï¿½ï¿½È£
    short            m_nMatchShotCount;            // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½Å© ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½.
    short            m_nMatchMaxSize;            // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½Å© ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Å« ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Å©ï¿½ï¿½.
    int                m_nUMShotX;                    // ìƒ· ê¸°ì¤€ X좌표
    int                m_nUMShotY;                    // ìƒ· ê¸°ì¤€ Y좌표
    short            m_nMaskDefectIdx;            // í•œ Glass에서 ë°œê²¬ëœ ë§ˆìŠ¤í¬ê²°í•¨ ë¬¶ìŒì˜ ì¸ë±ìФ.
    short            m_nShotIdx;                    // ë…¸ê´‘샷 ë²ˆí˜¸
    short            m_nMatchShotCount;            // ë™ì¼í•œ ë§ˆìŠ¤í¬ ê²°í•¨ì˜ ìˆ˜.
    short            m_nMatchMaxSize;            // ë™ì¼í•œ ë§ˆìŠ¤í¬ ì¤‘ ê°€ìž¥ í° ê²°í•¨ì˜ í¬ê¸°.
    short            m_nRepeatCount;                // ï¿½ï¿½ï¿½Ó°ï¿½ï¿½Ô¹ß°ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ç¥ ï¿½Ýºï¿½ï¿½ï¿½
    short            m_nRepeatCount;                // ì—°ì†ê²°í•¨ë°œê²¬ìœ„한 ë™ì¼ì¢Œí‘œ ë°˜ë³µìˆ˜
    short            m_nMaskRepeatCount;
    int                m_StackInfo;                // Stack Flag
    BOOL            m_bRealStack;                // Stack ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ TD(TRUE) ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½Í¸ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ TD(FALSE)������ ï¿½ï¿½ ï¿½Ö´ï¿½.
    short            m_nStackStepCount;            // Stack ï¿½ï¿½
    short            m_nStackColorIdx;            // Color�� ï¿½ï¿½ï¿½ï¿½ï¿½Ï´ï¿½ ï¿½Îµï¿½ï¿½ï¿½.
    BOOL            m_bRealStack;                // Stack ë¨¸ì§€ì— ì˜í•œ TD(TRUE) ì¸ì§€, í•„터링에 ì˜í•œ TD(FALSE)구분할 ìˆ˜ ìžˆë‹¤.
    short            m_nStackStepCount;            // Stack ìˆ˜
    short            m_nStackColorIdx;            // Color를 ì„ íƒí•˜ëŠ” ì¸ë±ìФ.
    //CString            m_strStackStep[CFDEFECT_STACKCOUNT];            // Stack Step.
    char            m_strStackFirst[60];            // Stack Step. //201221 CJH - ï¿½Ö´ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ 60bytes
    char            m_strUnitID[16];                // ï¿½ï¿½ï¿½Ö¾ï¿½ï¿½Ìµï¿½
    char            m_strStackFirst[60];            // Stack Step. //201221 CJH - ìµœëŒ€ ì‚¬ì´ì¦ˆ 60bytes
    char            m_strUnitID[16];                // ìœ ë‹›ì•„이디
    int                m_ClassificationType;                // enum ClassificationType            { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI�� TFE�� ï¿½ß°ï¿½ ï¿½Ð·ï¿½  ï¿½Ë°ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½.
    int                m_nAtomWidth;                // TFE ï¿½ï¿½ ï¿½Êºï¿½
    int                m_nAtomHeight;                // TFE ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    short/*ReKind*/            m_DefectKind;                // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    int                m_ClassificationType;                // enum ClassificationType            { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI나 TFE등 ì¶”ê°€ ë¶„류  ì•Œê³ ë¦¬ì¦˜ ì ìš© ê²°ê³¼.
    int                m_nAtomWidth;                // TFE í•µ ë„ˆë¹„
    int                m_nAtomHeight;                // TFE í•µ ë†’이
    short/*ReKind*/            m_DefectKind;                // ê²°í•¨ ì¢…류
    char            m_strDefectCode[32];            // Defect Code
    BOOL            m_bMergeState;                // Merge Status
    char            m_strAoiImageName[256];            // Defect Image Name(CCD Image)
    int                m_nDefectMerge;        // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    int                m_nDefectMerge;        // í˜„재 ë””펙의 ë¨¸ì§€ ì—¬ë¶€
    int                m_nPixelSizeOrigin;
    int                m_nScratchRatio;
    int                m_nDensity;            // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½Ðµï¿½ [2017.8.2 bhs]
    int                m_nDensity;            // ì›í˜• ê²°í•¨ êµ¬ë¶„을 ìœ„한 ë°€ë„ [2017.8.2 bhs]
    char            m_strDefectName[16];
    char            m_strDefectType[16];
@@ -491,16 +494,16 @@
    double            m_dScanResolution;
    double            m_dConvResolution;
    int                m_nAngle;                    // ï¿½ï¿½ï¿½ï¿½
    int                m_nMajor;                    // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½(Long)
    int                m_nMinor;                    // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½(Short)
    int                m_nCompact;                    // Blob ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½Ï´ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½Ì¿ï¿½ Blob ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    int                m_nThickness;                // Blob ï¿½ï¿½ï¿½Ì¿ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ (Area / Major)
    int                m_nAngle;                    // ê°ë„
    int                m_nMajor;                    // ìž¥ì¶• ê¸¸ì´(Long)
    int                m_nMinor;                    // ë‹¨ì¶• ê¸¸ì´(Short)
    int                m_nCompact;                    // Blob ìž¥ì¶•을 ì§€ë¦„으로 í•˜ëŠ” ì›ì˜ ë„“이와 Blob ë„“이의 ë¹„율
    int                m_nThickness;                // Blob ë„“이와 ìž¥ì¶•의 ë¹„율 (Area / Major)
    
    short            m_nHliLevelIdx;                // ï¿½ï¿½ ï¿½ï¿½Â° ï¿½ï¿½ï¿½ï¿½(�)�ΰ�?
    int                m_nHliLayers;                // ï¿½Ø´ï¿½ï¿½ï¿½Ô¿ï¿½ ï¿½ï¿½ï¿½Ôµï¿½ ï¿½ï¿½ï¿½Ì¾ï¿½ bitó��
    short            m_nHliLevelIdx;                // ëª‡ ë²ˆì§¸ ë ˆë²¨(채널)인가?
    int                m_nHliLayers;                // í•´ë‹¹ê²°í•¨ì— í¬í•¨ëœ ë ˆì´ì–´ bit처리
    BOOL            m_bShrinked;                //210323 CJH - Frame Shrink ï¿½ï¿½ï¿½ï¿½ ï¿½ß°ï¿½
    BOOL            m_bShrinked;                //210323 CJH - Frame Shrink ì •ë³´ ì¶”ê°€
    char            m_strAoiImagePath[255];
    char            m_strReviewImagePath[255];
@@ -511,7 +514,6 @@
    int                m_nAlignRectRight;
    //���� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2019/1/19]
    _grmDefectReviewData m_ReviewDefect;
};
@@ -556,32 +558,35 @@
struct _grmDitMemInfo
{
    //���� ï¿½Þ¸ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2018/11/12]
    //공유 ë©”모리 ìƒì„±í•  ê³µê°„ ê²°ì • [김태현 2018/11/12]
    size_t m_nGlassRawDataSize;
    int m_nGlassMaxDataNum;
    int m_nBlockMaxDataNum;
    int m_nCellMaxDataNum;
    int m_nDefectMaxDataNum;
    int m_nStackMaxDataNum;
    int m_nRawMergeMaxDataNum;
    //Char ï¿½ï¿½ï¿½ï¿½ ï¿½Ú·á°¡ ï¿½Ö´ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Ä¡ [������ 2018/11/12]
    //Char ê¸°ì¤€ ìžë£Œê°€ ìžˆëŠ” ì‹œìž‘ ìœ„치 [김태현 2018/11/12]
    int m_nGlassDataPoint;
    int m_nBlockDataPoint;
    int m_nCellDataPoint;
    int m_nDefectDataPoint;
    int m_nStackDataPoint;
    int m_nRawMergeDataPoint;
    int m_nSizeOfGlassData;
    int m_nSizeOfBlockData;
    int m_nSizeOfCellData;
    int m_nSizeOfDefectData;
    int m_nSizeOfStackData;
    int m_nSizeOfRawMergeData;
};
struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand
{
    size_t m_nGlassLoadingCount;
    emAOIProcStep m_ClientProcStep; //AOI, Review�� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½
    emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)�� Ã³ï¿½ï¿½ ï¿½Ï·ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½
    emAOIProcStep m_ClientProcStep; //AOI, Review가 ë³´ë‚¸ ëª…ë ¹
    emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)가 ì²˜ë¦¬ ì™„료 í•œ ëª…ë ¹
};
class CgrmGlassRawData
@@ -668,7 +673,7 @@
    {
        if(pInfo == NULL || pData == NULL) return FALSE;
        if(1) //new type //�޸� ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Å©ï¿½â¿¡ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
        if(1) //new type //메모리 ì´ ê³µê°„ í¬ê¸°ì— ìƒê´€ì—†ì´
        {
            //if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE;
ReviewHistory/bin/Config/PathSetting.ini
@@ -1,5 +1,5 @@
[Path]
Align=D:\ResultData\Align\
Bin=D:\DIT_ResultData\RawBin\
Inspector=D:\Image\Defect
Inspector=\\126.100.100.1\d\Image\Defect
Review=D:\ResultData\UploadImage\
ReviewHistory/bin/ReviewHistroy.exe
Binary files differ
ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp
@@ -77,7 +77,7 @@
        ProcessFlatness();
        Sleep(1000);
        if (ProcessDiagnosisJudge() == FALSE) {
        if (ProcessDiagnosisJudge(nProcessMode) == FALSE) {
            strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
            m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        }
@@ -97,7 +97,7 @@
        ProcessWsi();
        Sleep(1000);
        if (ProcessDiagnosisJudge() == FALSE) {
        if (ProcessDiagnosisJudge(nProcessMode) == FALSE) {
            strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
            m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        }
@@ -111,7 +111,7 @@
        m_pManager->m_bProcessAll = false;
        ProcessSquareness();
        Sleep(1000);
        if (ProcessDiagnosisJudge() == FALSE) {
        if (ProcessDiagnosisJudge(nProcessMode) == FALSE) {
            strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
            m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        }
@@ -121,7 +121,7 @@
        m_pManager->m_bProcessAll = false;
        ProcessFlatness();
        Sleep(1000);
        if (ProcessDiagnosisJudge() == FALSE) {
        if (ProcessDiagnosisJudge(nProcessMode) == FALSE) {
            strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
            m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
        }
@@ -171,7 +171,7 @@
    //Sleep(2000);
    Sleep(1000);
    if (ProcessDiagnosisJudge() == FALSE) {
    if (ProcessDiagnosisJudge(DiagnosisMode_All) == FALSE) {
        strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
        m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
    }
@@ -479,7 +479,7 @@
        {
            //#3514_LYW_CF AOI Review ìžê°€ì§„단 ê¸°ëŠ¥ ê°œì„ _START
            //if (10000 <= GetTickCount() - stTime)
            if (1000 <= GetTickCount() - stTime)
            if (11000 <= GetTickCount() - stTime)
            //#3514_LYW_CF AOI Review ìžê°€ì§„단 ê¸°ëŠ¥ ê°œì„ _END
            {
                break;
@@ -601,33 +601,33 @@
            Sleep(500);
        }
        if (nIdx == 0)
        {
            pResultPoint[nIdx].dPosX = 657.425
                ;
            pResultPoint[nIdx].dPosY = 540.14
                ;
        }
        else if (nIdx == 1)
        {
            pResultPoint[nIdx].dPosX = 657.425
                ;
            pResultPoint[nIdx].dPosY = 2278.636
                ;
        }
        else if (nIdx == 2)
        {
            pResultPoint[nIdx].dPosX = 2096.944
                ;
            pResultPoint[nIdx].dPosY = 540.141
                ;
        }
        else if (nIdx == 3)
        {
            pResultPoint[nIdx].dPosX = 2096.944
                ;
            pResultPoint[nIdx].dPosY = 2278.636;
        }
//         if (nIdx == 0)
//         {
//             pResultPoint[nIdx].dPosX = 657.425
//                 ;
//             pResultPoint[nIdx].dPosY = 540.14
//                 ;
//         }
//         else if (nIdx == 1)
//         {
//             pResultPoint[nIdx].dPosX = 657.425
//                 ;
//             pResultPoint[nIdx].dPosY = 2278.636
//                 ;
//         }
//         else if (nIdx == 2)
//         {
//             pResultPoint[nIdx].dPosX = 2096.944
//                 ;
//             pResultPoint[nIdx].dPosY = 540.141
//                 ;
//         }
//         else if (nIdx == 3)
//         {
//             pResultPoint[nIdx].dPosX = 2096.944
//                 ;
//             pResultPoint[nIdx].dPosY = 2278.636;
//         }
        //1. ëª¨í„°ë¥¼ ì´ë™
@@ -735,7 +735,7 @@
    return TRUE;
}
int CDiagnosisProcessor::ProcessDiagnosisJudge()
int CDiagnosisProcessor::ProcessDiagnosisJudge(int nMode)
{
    for (int i = 0; i < 2; i++)
    {
@@ -760,22 +760,28 @@
        }
        CString strMessage = _T("");
        double dDate = (90 - pProcessResult->GetGantryDegree());
        if (abs(dDate) >= abs(pSettingInfo->GetJudgeData_Degree())) // 0412 kyh ì§ê°ë„에서 ë‚˜ì˜¨ Dgree ê°’이 ì„¤ì •한 Judge ê°’보다 í¬ê±°ë‚˜ ê°™ì„경우
        if (nMode == DiagnosisMode_All || nMode == DiagnosisMode_Review || nMode == DiagnosisMode_Squareness)
        {
            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);
                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 í‘œì¤€íŽ¸ì°¨ ë¹„교
        if (nMode == DiagnosisMode_All || nMode == DiagnosisMode_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 (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
ReviewSystem/ReviewSystem/DitGlassRawClient.cpp
@@ -105,6 +105,7 @@
    m_pCellData   = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint];
    m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint];
    m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint];
    m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint];
    return TRUE;
}
@@ -139,7 +140,7 @@
    if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)//���� ï¿½ï¿½ï¿½Ù´Â°ï¿½ï¿½ï¿½ ï¿½ï¿½Å§ï¿½ï¿½ ï¿½ï¿½ï¿½Û°ï¿½ ï¿½Ñ¹ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½Ò´Ù´Â°ï¿½!! [������ 2018/11/12]
    {
        m_pGlassRawInfo->m_nCommandIdxRead++;//���� ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½Ï³ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½Ñ´ï¿½. [������ 2018/11/12]
        m_pGlassRawInfo->m_nCommandIdxRead++;//占쏙옙占쏙옙 å ì™ì˜™å ì™ì˜™å ì™ì˜™ å ì™ì˜™å ?占싹놂옙占쏙옙 å ì™ì˜™å ì™ì˜™å ì‹¼ëŒì˜™. [占쏙옙占쏙옙占쏙옙 2018/11/12]
    }
    m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nCommand = (short)nCmd;
@@ -171,6 +172,7 @@
    if(isConnect() == FALSE) return FALSE;
    m_pGlassRawInfo->m_ClientProcStep = APS_GlassLoading;
    m_pGlassData->m_bStackRead = FALSE;
    m_pGlassData->m_bRawMergeRead = FALSE;
    return SetCommand(grcSequenceGlassLoading);
}
ReviewSystem/ReviewSystem/DitGlassRawClient.h
@@ -56,6 +56,7 @@
    _grmCellData*   m_pCellData;
    _grmDefectData* m_pDefectData;
    _grmDefectData* m_pStackData;
    _grmDefectData* m_pRawMergeData;
protected:
    HANDLE        m_hMapBasicInfo;
ReviewSystem/ReviewSystem/DitGlassRawStruct.h
@@ -8,6 +8,7 @@
#define RAWMESSENGER_MAXCAMNUM 30
#define RAWMESSENGER_MAXSCANNUM 20
#define RAWMESSENGER_MAXHLINUM 8
#define MAX_ZONE_NUM 16
@@ -47,7 +48,7 @@
        memset(this, 0, sizeof(_grmGlassData));
    }
    //Glass ï¿½ï¿½ï¿½ï¿½
    //Glass ì •ë³´
    char m_strFileName[64];
    char m_strPath[256];
@@ -56,12 +57,12 @@
    int m_nOriginDirection;                //{ GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 };
    int m_nConerCutDirection;
    int    m_nScanCoordinateY;                //���Ⱑ 0�̸� ï¿½Ï¹ï¿½, 1�̸� Scan������ y��(�� scan������ ï¿½ï¿½ï¿½ï¿½, offline ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½)
    int    m_nScanCoordinateY;                //여기가 0이면 ì¼ë°˜, 1이면 Scan방향이 y축(즉 scan방향이 ë‹¨ì¶•, offline ì„¤ë¹„ ê°™ì€)
    int m_nGlassSizeWidth;
    int m_nGlassSizeHeight;
    //��������
    //설비정보
    char m_strLine[32];
    char m_strEquipType[32];            
    char m_strEquipID[32];                
@@ -74,7 +75,7 @@
    CTime    m_tmReviewLoading;
    CTime    m_tmReviewEnd;
    //�⺻ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
    //기본 ë¬¼ë¥˜ì •ë³´
    char m_strGlassID[32];                //Glass ID
    char m_strPPID[32];                    
    char m_strEPPID[32];                
@@ -91,7 +92,7 @@
    char m_strVCRGlassID[32];
    //���� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    //결함 ê°¯ìˆ˜ ê´€ë¦¬ ë³€ìˆ˜
    int            m_nDefectNumSizeSmall;
    int            m_nDefectNumSizeMid;
    int            m_nDefectNumSizeLarge;
@@ -126,14 +127,14 @@
    int            m_nDefectNumStackSP;
    //ī�޶�/��ĵ ï¿½ï¿½ï¿½ï¿½ [������ 2018/12/5]
    //카메라/스캔 ì •ë³´ [김태현 2018/12/5]
    short        m_nCameraNum;
    short        m_nScanNum;
    unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM];
    unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM];
    unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM];
    unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
    unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
    unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
    //����� ï¿½ï¿½ï¿½ï¿½ um[������ 2018/12/10]
    //얼라인 ì •ë³´ um[김태현 2018/12/10]
    double    m_nAlignCcdTheta;
    double    m_nAlignCcdShitftX;
    double    m_nAlignCcdShitftY;
@@ -147,7 +148,7 @@
    char    m_strAlignSecond[64];
//     char    m_strAlignPath[256];
    //CSOT�� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2018/12/5]
    //CSOT용 ë¬¼ë¥˜ ì •ë³´ [김태현 2018/12/5]
    char m_strCassetteSequenceNo[16];
    char m_strOwnerCode[16];            //2. OWNER_CODE
    char m_strOwnerType[16];            //3. OWNER_TYPE
@@ -162,7 +163,7 @@
    char m_strGroupID[16];                //14.GROUP_ID
    char m_cAutoSampleFlag;                //15.AUTOSAMPLEFLAG
    // CPRJ�� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    // CPRJ용 ë¬¼ë¥˜ ì •ë³´
    char m_strProdType[3];
    char m_strBatchID[13];
    char m_strPairHPanelID[13];
@@ -188,17 +189,19 @@
    BYTE m_nGlassDataBitSignal[4];
    bool m_bJob_end;  
    //201217 CJH - ï¿½ï¿½ï¿½ï¿½ Defect Review ï¿½ï¿½ï¿½ï¿½
    //201217 CJH - ì°ì€ Defect Review ê°œìˆ˜
    int m_nReviewNum;
    //201221 CJH - ï¿½Ä½ï¿½ï¿½ï¿½ Stack ï¿½ï¿½ï¿½
    //201221 CJH - íŒŒì‹±í•œ Stack ê²°ê³¼
    int m_nStackNum;
    BOOL m_bStackRead;
    //210203 CJH - CutOff ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½
    int m_nRawMergeNum;
    BOOL m_bRawMergeRead;
    //210203 CJH - CutOff ëŒ€ìƒ ê²°í•¨ ìˆ˜
    int m_nCutOffDefectNum;
    //210323 CJH - Server/Frame Shrink ï¿½ï¿½ï¿½ï¿½ ï¿½ß°ï¿½
    //210323 CJH - Server/Frame Shrink ì •ë³´ ì¶”ê°€
    char m_strShrinked[6];
    //210326 CJH - RAW ï¿½Ô·ï¿½ Defect ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ë¿©ï¿½ï¿½
    //210326 CJH - RAW ìž…ë ¥ Defect ìˆ˜ëŸ‰ ìƒí•œ ì‚¬ìš©ì—¬ë¶€
    BOOL m_bRawCutoff;
};
@@ -222,7 +225,7 @@
    }
    int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; };
    int                        m_nCellID;                            //1. PANEL_ID
    short                    m_nModelIdx;                // ï¿½ï¿½ ï¿½ï¿½Â° ï¿½ï¿½ï¿½Î°ï¿½?
    short                    m_nModelIdx;                // ëª‡ ë²ˆì§¸ ëª¨ë¸ì¸ê°€?
    char                    m_strCellName[32];
    int                        m_rectCellLeft;
@@ -235,7 +238,7 @@
    int                        m_nJudgeGlade;
    //���� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    //결함 ê°¯ìˆ˜ ê´€ë¦¬ ë³€ìˆ˜
    int            m_nDefectNumSizeSmall;
    int            m_nDefectNumSizeMid;
    int            m_nDefectNumSizeLarge;
@@ -259,7 +262,7 @@
    char        m_strProImage[32];
    char        m_strAvgGray_0[12];
    char        m_strPortion_0[12];
    //kyh Mura Data ï¿½ß°ï¿½ 0622
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_0[12];
    char        m_strAvgAmp_0[12];
    char        m_strFFTVar_0[12];
@@ -269,7 +272,7 @@
    char        m_strAvgGray_1[12];
    char        m_strPortion_1[12];
    //kyh Mura Data ï¿½ß°ï¿½ 0622
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_1[12];
    char        m_strAvgAmp_1[12];
    char        m_strFFTVar_1[12];
@@ -279,7 +282,7 @@
    char        m_strAvgGray_2[12];
    char        m_strPortion_2[12];
    //kyh Mura Data ï¿½ß°ï¿½ 0622
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_2[12];
    char        m_strAvgAmp_2[12];
    char        m_strFFTVar_2[12];
@@ -289,7 +292,7 @@
    char        m_strAvgGray_3[12];
    char        m_strPortion_3[12];
    //kyh Mura Data ï¿½ß°ï¿½ 0622
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_3[12];
    char        m_strAvgAmp_3[12];
    char        m_strFFTVar_3[12];
@@ -308,17 +311,17 @@
    int            m_nReflowResult[8];            // 0: Reflow X 1: Reflow OK 2: Reflow NG
    // Filtering�� Stack�� ï¿½ï¿½
    // Filtering된 Stack별 ìˆ˜
    int            m_nDefectTDCount;
    int            m_nDefectSDCount;
    int            m_nDefectPDCount;
    int            m_nDefectSPCount;
    // Gate/Data ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    // Gate/Data ì´ ê°¯ìˆ˜
    int            m_nGateNum;
    int            m_nDataNum;
    // 210129 CJH - Cell Origin ï¿½ï¿½ï¿½ï¿½
    // 210129 CJH - Cell Origin ë°©í–¥
    int            m_nCellXDir;
    int            m_nCellYDir;
};
@@ -331,10 +334,10 @@
    }
    //////////////////////////////////////////////////////////////////////////
    //���⼭ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2019/1/19]
    //여기서 ë¶€í„° ë¦¬ë·° ì˜ì—­ [김태현 2019/1/19]
    ditRaw::ReviewPlanType            m_nPlanType    ;    
    int            m_nResultCode;  //0:None, 1:Success
    int            m_nShotIndex; //���� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2018/12/5]
    int            m_nShotIndex; //리뷰 ì°ì€ ìˆœë²ˆ [김태현 2018/12/5]
    int            m_nModuleIndex;
    int            m_nMagnificIndex;
    float        m_fManification;
@@ -343,15 +346,15 @@
    char        m_strRevImagePath[256];
    //////////////////////////////////////////////////////////////////////////
    // Measure ï¿½ï¿½ï¿½ï¿½
    // Measure ì˜ì—­
    int            m_nMeasure_Index;
    int            m_nMeasure_ResultCode; //0:None, 1:Success
    float        m_fMesure_ResultData[8];    // 0:Type, 1:ShiftX, 2:ShiftY
    //////////////////////////////////////////////////////////////////////////
    // WSI����
    // WSI영역
    int            m_nWsi_ResultCode; //0:None, 1:Success
    int            m_nWsi_Type;                                    // ï¿½Ô¸ï¿½ / ï¿½ï¿½ï¿½ï¿½
    int            m_nWsi_Type;                                    // í•¨ëª° / ëŒê¸°
    float        m_fWsi_ResultData[8];            // 0:Type, 1:Height(um), 2:Width
    char        m_strWsi_2DImageFilename[256];
    char        m_strWsi_3DImageFilename[256]; 
@@ -359,14 +362,14 @@
    int            m_nWsi_pReflowResultData[8];
    double        m_dWsi_DamDistance;
    double        m_dWsiMmMotorX;                                // WSI ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Ç¥ 20180223 HJH
    double        m_dWsiMmMotorX;                                // WSI ëª¨í„° ì¢Œí‘œ 20180223 HJH
    double        m_dWsiMmMotorY;
    float        m_fWsiManification;                            // WSI ï¿½ï¿½ï¿½ï¿½
    float        m_fWsiManification;                            // WSI ë°°ìœ¨
    //////////////////////////////////////////////////////////////////////////
    // Reflow ï¿½ï¿½ï¿½ï¿½
    // Reflow ì˜ì—­
    int            m_nReflow_Index;
    int            m_nReflow_ResultCode; //0:None, // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Line�� ï¿½ï¿½ï¿½ï¿½. 3 ï¿½Ì¸ï¿½ : DAM2 Reflow ï¿½ï¿½ï¿½ï¿½, 4~5 : DAM1 Reflow ï¿½ï¿½ï¿½ï¿½, 6 : no Reflow ï¿½ï¿½ï¿½ï¿½ / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side
    int            m_nReflow_ResultCode; //0:None, // ê²€ì¶œí•œ Line의 ê°œìˆ˜. 3 ë¯¸ë§Œ : DAM2 Reflow íŒì •, 4~5 : DAM1 Reflow íŒì •, 6 : no Reflow íŒì • / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side
    float        m_fReflow_LinePosData[8];    
    int            m_nReflow_Side;
    int            m_nReflow_InspectionMode;
@@ -382,108 +385,108 @@
    short            m_nDefectID;
    short            m_nCameraID;
    short            m_nScanIdx;
    //short            m_nDefectIdx;                // Ä«ï¿½Þ¶ó¿¡¼ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½Îµï¿½ï¿½ï¿½
    int                m_nDefectIdx;                // Ä«ï¿½Þ¶ó¿¡¼ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½Îµï¿½ï¿½ï¿½ 201207 CJH - ï¿½Ú¸ï¿½ ï¿½ï¿½ ï¿½ï¿½Ä§. int������ ï¿½ï¿½ï¿½ï¿½
    //short            m_nDefectIdx;                // ì¹´ë©”라에서의 ê²°í•¨ ì¸ë±ìФ
    int                m_nDefectIdx;                // ì¹´ë©”라에서의 ê²°í•¨ ì¸ë±ìФ 201207 CJH - ìžë¦¿ ìˆ˜ ë„˜ì¹¨. int형으로 ë³€ê²½
    int                m_nPixelConv;                // pixel ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Ç¥
    int                m_nPixelScan;                // pixel ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Ç¥
    int                m_nPixelConv;                // pixel ë‹¨ìœ„ ì¢Œí‘œ
    int                m_nPixelScan;                // pixel ë‹¨ìœ„ ì¢Œí‘œ
    short                            m_nPixelSize;                // ï¿½ï¿½ï¿½ï¿½Å©ï¿½ï¿½        ---------------------------------PS
    short/*SERVER_DefectType*/        m_DefectType;                // ï¿½ï¿½ï¿½ï¿½ Å¸ï¿½ï¿½    ---------------------------------DT
    short/*SERVER_DefectSubType*/    m_DefectSubType;            // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.
    short/*SERVER_DefectBDType*/    m_DefectBDType;                // ï¿½ï¿½ï¿½ï¿½ Å¸ï¿½ï¿½ - Bright, Dark, Both
    short                            m_nPixelSize;                // ê²°í•¨í¬ê¸°        ---------------------------------PS
    short/*SERVER_DefectType*/        m_DefectType;                // ê²°í•¨ íƒ€ìž…    ---------------------------------DT
    short/*SERVER_DefectSubType*/    m_DefectSubType;            // ê²°í•¨ì˜ íŒì •상태.
    short/*SERVER_DefectBDType*/    m_DefectBDType;                // ê²°í•¨ íƒ€ìž… - Bright, Dark, Both
    short            m_sPixelWidth;                // ï¿½È¼ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½Êºï¿½
    short            m_sPixelHeight;                // ï¿½È¼ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    short            m_nLevelSrcMin;                // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ Min    -----------------------------SN
    short            m_nLevelSrcMax;                // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ Max    -----------------------------SX
    short            m_nLevelSrcAvg;                // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ Avg    -----------------------------SA
    short            m_nLevelRefMin;                // ï¿½ñ±³´ï¿½ï¿½ ï¿½ï¿½ï¿½ Min    -------------------------RN
    short            m_nLevelRefMax;                // ï¿½ñ±³´ï¿½ï¿½ ï¿½ï¿½ï¿½ Max    -------------------------RX
    short            m_nLevelRefAvg;                // ï¿½ñ±³´ï¿½ï¿½ ï¿½ï¿½ï¿½ Avg    -------------------------RA
    short            m_nLevelDiffMin;            // ï¿½ï¿½ï¿½ï¿½ Min    ---------------------------------DN
    short            m_nLevelDiffMax;            // ï¿½ï¿½ï¿½ï¿½ Max    ---------------------------------DX
    short            m_nLevelDiffAvg;            // ï¿½ï¿½ï¿½ï¿½ Avg    ---------------------------------DA
    short            m_sPixelWidth;                // í”½ì…€ë‹¨ìœ„ ê²°í•¨ ë„ˆë¹„
    short            m_sPixelHeight;                // í”½ì…€ë‹¨ìœ„ ê²°í•¨ ë†’이
    short            m_nLevelSrcMin;                // ê²°í•¨ ë°ê¸° Min    -----------------------------SN
    short            m_nLevelSrcMax;                // ê²°í•¨ ë°ê¸° Max    -----------------------------SX
    short            m_nLevelSrcAvg;                // ê²°í•¨ ë°ê¸° Avg    -----------------------------SA
    short            m_nLevelRefMin;                // ë¹„교대상 ë°ê¸° Min    -------------------------RN
    short            m_nLevelRefMax;                // ë¹„교대상 ë°ê¸° Max    -------------------------RX
    short            m_nLevelRefAvg;                // ë¹„교대상 ë°ê¸° Avg    -------------------------RA
    short            m_nLevelDiffMin;            // ë¹„교차 Min    ---------------------------------DN
    short            m_nLevelDiffMax;            // ë¹„교차 Max    ---------------------------------DX
    short            m_nLevelDiffAvg;            // ë¹„교차 Avg    ---------------------------------DA
    int                m_nDefectRScale;            // ï¿½È¼ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½    -------------------------RS
    short            m_sThreshold;                // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Threshold
    short            m_sThresholdAvg;            // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Threshold AVG
    short            m_sDefectPeak;                // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Peak.
    short            m_sDefectLevel;                // (DiffAvg - Th) BOE 8G ï¿½ï¿½Ã»ï¿½ï¿½ï¿½ï¿½
    int                m_nDefectRScale;            // í”½ì…€ë‹¨ìœ„ ê²°í•¨ ë†’이    -------------------------RS
    short            m_sThreshold;                // ê²°í•¨ì„ ê²€ì¶œí•  ë•Œì˜ Threshold
    short            m_sThresholdAvg;            // ê²°í•¨ì„ ê²€ì¶œí•  ë•Œì˜ Threshold AVG
    short            m_sDefectPeak;                // ê²°í•¨ì˜ Peak.
    short            m_sDefectLevel;                // (DiffAvg - Th) BOE 8G ìš”청사항
    int                m_nPixelGlassStart;            // Glass ï¿½ï¿½ï¿½ï¿½ ï¿½È¼ï¿½
    int                m_nPixelGlassStart;            // Glass ì‹œìž‘ í”½ì…€
    short            m_sDefectLoc;
    short            m_sZoneClassPixelCount[16];
    short            m_sZonePixelCount[16];    // Zone�� ï¿½ï¿½ï¿½ï¿½ Pixel ï¿½ï¿½
    short            m_sZoneValueMin[16];    // Zone�� ï¿½ï¿½ï¿½ï¿½ Min
    short            m_sZoneValueMax[16];    // Zone�� ï¿½ï¿½ï¿½ï¿½ Max
    short            m_sZoneValueAvg[16];    // Zone�� ï¿½ï¿½ï¿½ï¿½ Avg
    short            m_sZonePixelCount[16];    // Zone별 ê²°í•¨ Pixel ìˆ˜
    short            m_sZoneValueMin[16];    // Zone별 ê²°í•¨ Min
    short            m_sZoneValueMax[16];    // Zone별 ê²°í•¨ Max
    short            m_sZoneValueAvg[16];    // Zone별 ê²°í•¨ Avg
    short            m_sZonePixelPercent[16];    // --------------------------------------Z0~ZF
    //210127 CJH - Zone�� Source Gray ï¿½Ô·ï¿½
    short            m_sZoneValueSrcMin[16];    // Zone�� Source Min
    short            m_sZoneValueSrcMax[16];    // Zone�� Source Max
    short            m_sZoneValueSrcAvg[16]; // Zone�� Source Avg
    //210127 CJH - Zone별 Source Gray ìž…ë ¥
    short            m_sZoneValueSrcMin[16];    // Zone별 Source Min
    short            m_sZoneValueSrcMax[16];    // Zone별 Source Max
    short            m_sZoneValueSrcAvg[16]; // Zone별 Source Avg
    int                m_nUMOriginX;                // um���� x��ǥ (��������)
    int                m_nUMOriginY;                // um���� y��ǥ (��������)
    int                m_nUMCenterAlignX;            // um���� X��ǥ (Glass Center ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½Îºï¿½ï¿½ï¿½ ï¿½ï¿½)
    int                m_nUMCenterAlignY;            // um���� Y��ǥ (Glass Center ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½Îºï¿½ï¿½ï¿½ ï¿½ï¿½)
    int                m_nUMCenterX;                // um���� X��ǥ (Glass Center ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½Îºï¿½ï¿½ï¿½ ï¿½ï¿½)
    int                m_nUMCenterY;                // um���� Y��ǥ (Glass Center ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½Îºï¿½ï¿½ï¿½ ï¿½ï¿½)
    int                m_nUMSizeX;                    // um���� X Å©ï¿½ï¿½    -----------------------------UX
    int                m_nUMSizeY;                    // um���� Y Å©ï¿½ï¿½    -----------------------------UY
    int                m_nUMSize;                    // um���� Å©ï¿½ï¿½.
    CRect            m_RectUM;                    // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ç°¢ï¿½ï¿½.
    int                m_nUMOriginX;                // um단위 x좌표 (원점기준)
    int                m_nUMOriginY;                // um단위 y조표 (원점기준)
    int                m_nUMCenterAlignX;            // um단위 X좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • í›„)
    int                m_nUMCenterAlignY;            // um단위 Y좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • í›„)
    int                m_nUMCenterX;                // um단위 X좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • ì „)
    int                m_nUMCenterY;                // um단위 Y좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • ì „)
    int                m_nUMSizeX;                    // um단위 X í¬ê¸°    -----------------------------UX
    int                m_nUMSizeY;                    // um단위 Y í¬ê¸°    -----------------------------UY
    int                m_nUMSize;                    // um단위 í¬ê¸°.
    CRect            m_RectUM;                    // ë””펙 ì„¼í„° ê¸°ì¤€ ì‚¬ê°í˜•.
    short/*SERVER_DefectSizeType*/    m_DefectSizeType;            // ï¿½ï¿½ï¿½ï¿½ Å©ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½enum SERVER_DefectSizeType        { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra };
    short/*SERVER_DefectPeakType*/    m_DefectPeakType;            // Peak�� ï¿½ï¿½ï¿½ï¿½.
    short/*Judgement*/                m_DefectJudgement;            // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½.
    BOOL                    m_bDefectCutoff;            // ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½(TRUE= Cutoff, FALSE)
    short/*MAP16_DefectClass*/        m_DefectClass;                // BOE Defect Class 16��� ï¿½ï¿½ï¿½ï¿½
    int                m_nPadRegionIdx;            // PAD ï¿½ï¿½ï¿½ï¿½ ï¿½Îµï¿½ï¿½ï¿½
    short/*SERVER_DefectSizeType*/    m_DefectSizeType;            // ê²°í•¨ í¬ê¸° ì¢…류enum SERVER_DefectSizeType        { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra };
    short/*SERVER_DefectPeakType*/    m_DefectPeakType;            // Peak의 ì¢…류.
    short/*Judgement*/                m_DefectJudgement;            // ê²°í•¨ íŒì •.
    BOOL                    m_bDefectCutoff;            // ì»· ì˜¤í”„ ë””펙(TRUE= Cutoff, FALSE)
    short/*MAP16_DefectClass*/        m_DefectClass;                // BOE Defect Class 16등분 êµ¬ë¶„
    int                m_nPadRegionIdx;            // PAD ì˜ì—­ ì¸ë±ìФ
    int                m_nUMCellX;                    // ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ x ï¿½ï¿½Ç¥
    int                m_nUMCellY;                    // ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ y ï¿½ï¿½Ç¥
    short            m_nModelIdx;                // ï¿½ï¿½ ï¿½ï¿½Â° ï¿½ï¿½ï¿½Î°ï¿½?
    short            m_nCellIdx;                    // ï¿½ï¿½ï¿½Â° ï¿½ï¿½ï¿½Î°ï¿½?
    short            m_nCellGate;                // ï¿½ï¿½ï¿½ï¿½ Gate����(����� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½)
    short            m_nCellData;                // ï¿½ï¿½ï¿½ï¿½ Data����(����� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½)
    short            m_nCellGateAlign;            // ï¿½ï¿½ï¿½ï¿½ Gate����(����� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½)
    short            m_nCellDataAlign;            // ï¿½ï¿½ï¿½ï¿½ Data����(����� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½)
    int                m_nUMCellX;                    // ì…€ ì›ì  ê¸°ì¤€ x ì¢Œí‘œ
    int                m_nUMCellY;                    // ì…€ ì›ì  ê¸°ì¤€ y ì¢Œí‘œ
    short            m_nModelIdx;                // ëª‡ ë²ˆì§¸ ëª¨ë¸ì¸ê°€?
    short            m_nCellIdx;                    // ëª‡ë²ˆì§¸ ì…€ì¸ê°€?
    short            m_nCellGate;                // ì…€ë³„ Gate라인(얼라인 ë³´ì • ì „)
    short            m_nCellData;                // ì…€ë³„ Data라인(얼라인 ë³´ì • ì „)
    short            m_nCellGateAlign;            // ì…€ë³„ Gate라인(얼라인 ë³´ì • í›„)
    short            m_nCellDataAlign;            // ì…€ë³„ Data라인(얼라인 ë³´ì • í›„)
    int                m_nUMShotX;                    // ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ X��ǥ
    int                m_nUMShotY;                    // ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Y��ǥ
    short            m_nMaskDefectIdx;            // ï¿½ï¿½ Glass���� ï¿½ß°ßµï¿½ ï¿½ï¿½ï¿½ï¿½Å©ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½Îµï¿½ï¿½ï¿½.
    short            m_nShotIdx;                    // ï¿½ë±¤ï¿½ï¿½ ï¿½ï¿½È£
    short            m_nMatchShotCount;            // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½Å© ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½.
    short            m_nMatchMaxSize;            // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½Å© ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Å« ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Å©ï¿½ï¿½.
    int                m_nUMShotX;                    // ìƒ· ê¸°ì¤€ X좌표
    int                m_nUMShotY;                    // ìƒ· ê¸°ì¤€ Y좌표
    short            m_nMaskDefectIdx;            // í•œ Glass에서 ë°œê²¬ëœ ë§ˆìŠ¤í¬ê²°í•¨ ë¬¶ìŒì˜ ì¸ë±ìФ.
    short            m_nShotIdx;                    // ë…¸ê´‘샷 ë²ˆí˜¸
    short            m_nMatchShotCount;            // ë™ì¼í•œ ë§ˆìŠ¤í¬ ê²°í•¨ì˜ ìˆ˜.
    short            m_nMatchMaxSize;            // ë™ì¼í•œ ë§ˆìŠ¤í¬ ì¤‘ ê°€ìž¥ í° ê²°í•¨ì˜ í¬ê¸°.
    short            m_nRepeatCount;                // ï¿½ï¿½ï¿½Ó°ï¿½ï¿½Ô¹ß°ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ç¥ ï¿½Ýºï¿½ï¿½ï¿½
    short            m_nRepeatCount;                // ì—°ì†ê²°í•¨ë°œê²¬ìœ„한 ë™ì¼ì¢Œí‘œ ë°˜ë³µìˆ˜
    short            m_nMaskRepeatCount;
    int                m_StackInfo;                // Stack Flag
    BOOL            m_bRealStack;                // Stack ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ TD(TRUE) ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½Í¸ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ TD(FALSE)������ ï¿½ï¿½ ï¿½Ö´ï¿½.
    short            m_nStackStepCount;            // Stack ï¿½ï¿½
    short            m_nStackColorIdx;            // Color�� ï¿½ï¿½ï¿½ï¿½ï¿½Ï´ï¿½ ï¿½Îµï¿½ï¿½ï¿½.
    BOOL            m_bRealStack;                // Stack ë¨¸ì§€ì— ì˜í•œ TD(TRUE) ì¸ì§€, í•„터링에 ì˜í•œ TD(FALSE)구분할 ìˆ˜ ìžˆë‹¤.
    short            m_nStackStepCount;            // Stack ìˆ˜
    short            m_nStackColorIdx;            // Color를 ì„ íƒí•˜ëŠ” ì¸ë±ìФ.
    //CString            m_strStackStep[CFDEFECT_STACKCOUNT];            // Stack Step.
    char            m_strStackFirst[60];            // Stack Step. //201221 CJH - ï¿½Ö´ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ 60bytes
    char            m_strUnitID[16];                // ï¿½ï¿½ï¿½Ö¾ï¿½ï¿½Ìµï¿½
    char            m_strStackFirst[60];            // Stack Step. //201221 CJH - ìµœëŒ€ ì‚¬ì´ì¦ˆ 60bytes
    char            m_strUnitID[16];                // ìœ ë‹›ì•„이디
    int                m_ClassificationType;                // enum ClassificationType            { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI�� TFE�� ï¿½ß°ï¿½ ï¿½Ð·ï¿½  ï¿½Ë°ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½.
    int                m_nAtomWidth;                // TFE ï¿½ï¿½ ï¿½Êºï¿½
    int                m_nAtomHeight;                // TFE ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    short/*ReKind*/            m_DefectKind;                // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    int                m_ClassificationType;                // enum ClassificationType            { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI나 TFE등 ì¶”ê°€ ë¶„류  ì•Œê³ ë¦¬ì¦˜ ì ìš© ê²°ê³¼.
    int                m_nAtomWidth;                // TFE í•µ ë„ˆë¹„
    int                m_nAtomHeight;                // TFE í•µ ë†’이
    short/*ReKind*/            m_DefectKind;                // ê²°í•¨ ì¢…류
    char            m_strDefectCode[32];            // Defect Code
    BOOL            m_bMergeState;                // Merge Status
    char            m_strAoiImageName[256];            // Defect Image Name(CCD Image)
    int                m_nDefectMerge;        // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    int                m_nDefectMerge;        // í˜„재 ë””펙의 ë¨¸ì§€ ì—¬ë¶€
    int                m_nPixelSizeOrigin;
    int                m_nScratchRatio;
    int                m_nDensity;            // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½Ðµï¿½ [2017.8.2 bhs]
    int                m_nDensity;            // ì›í˜• ê²°í•¨ êµ¬ë¶„을 ìœ„한 ë°€ë„ [2017.8.2 bhs]
    char            m_strDefectName[16];
    char            m_strDefectType[16];
@@ -491,16 +494,16 @@
    double            m_dScanResolution;
    double            m_dConvResolution;
    int                m_nAngle;                    // ï¿½ï¿½ï¿½ï¿½
    int                m_nMajor;                    // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½(Long)
    int                m_nMinor;                    // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½(Short)
    int                m_nCompact;                    // Blob ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½Ï´ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½Ì¿ï¿½ Blob ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½
    int                m_nThickness;                // Blob ï¿½ï¿½ï¿½Ì¿ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ (Area / Major)
    int                m_nAngle;                    // ê°ë„
    int                m_nMajor;                    // ìž¥ì¶• ê¸¸ì´(Long)
    int                m_nMinor;                    // ë‹¨ì¶• ê¸¸ì´(Short)
    int                m_nCompact;                    // Blob ìž¥ì¶•을 ì§€ë¦„으로 í•˜ëŠ” ì›ì˜ ë„“이와 Blob ë„“이의 ë¹„율
    int                m_nThickness;                // Blob ë„“이와 ìž¥ì¶•의 ë¹„율 (Area / Major)
    
    short            m_nHliLevelIdx;                // ï¿½ï¿½ ï¿½ï¿½Â° ï¿½ï¿½ï¿½ï¿½(�)�ΰ�?
    int                m_nHliLayers;                // ï¿½Ø´ï¿½ï¿½ï¿½Ô¿ï¿½ ï¿½ï¿½ï¿½Ôµï¿½ ï¿½ï¿½ï¿½Ì¾ï¿½ bitó��
    short            m_nHliLevelIdx;                // ëª‡ ë²ˆì§¸ ë ˆë²¨(채널)인가?
    int                m_nHliLayers;                // í•´ë‹¹ê²°í•¨ì— í¬í•¨ëœ ë ˆì´ì–´ bit처리
    BOOL            m_bShrinked;                //210323 CJH - Frame Shrink ï¿½ï¿½ï¿½ï¿½ ï¿½ß°ï¿½
    BOOL            m_bShrinked;                //210323 CJH - Frame Shrink ì •ë³´ ì¶”ê°€
    char            m_strAoiImagePath[255];
    char            m_strReviewImagePath[255];
@@ -511,7 +514,6 @@
    int                m_nAlignRectRight;
    //���� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2019/1/19]
    _grmDefectReviewData m_ReviewDefect;
};
@@ -556,32 +558,35 @@
struct _grmDitMemInfo
{
    //���� ï¿½Þ¸ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2018/11/12]
    //공유 ë©”모리 ìƒì„±í•  ê³µê°„ ê²°ì • [김태현 2018/11/12]
    size_t m_nGlassRawDataSize;
    int m_nGlassMaxDataNum;
    int m_nBlockMaxDataNum;
    int m_nCellMaxDataNum;
    int m_nDefectMaxDataNum;
    int m_nStackMaxDataNum;
    int m_nRawMergeMaxDataNum;
    //Char ï¿½ï¿½ï¿½ï¿½ ï¿½Ú·á°¡ ï¿½Ö´ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Ä¡ [������ 2018/11/12]
    //Char ê¸°ì¤€ ìžë£Œê°€ ìžˆëŠ” ì‹œìž‘ ìœ„치 [김태현 2018/11/12]
    int m_nGlassDataPoint;
    int m_nBlockDataPoint;
    int m_nCellDataPoint;
    int m_nDefectDataPoint;
    int m_nStackDataPoint;
    int m_nRawMergeDataPoint;
    int m_nSizeOfGlassData;
    int m_nSizeOfBlockData;
    int m_nSizeOfCellData;
    int m_nSizeOfDefectData;
    int m_nSizeOfStackData;
    int m_nSizeOfRawMergeData;
};
struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand
{
    size_t m_nGlassLoadingCount;
    emAOIProcStep m_ClientProcStep; //AOI, Review�� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½
    emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)�� Ã³ï¿½ï¿½ ï¿½Ï·ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½
    emAOIProcStep m_ClientProcStep; //AOI, Review가 ë³´ë‚¸ ëª…ë ¹
    emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)가 ì²˜ë¦¬ ì™„료 í•œ ëª…ë ¹
};
class CgrmGlassRawData
@@ -668,7 +673,7 @@
    {
        if(pInfo == NULL || pData == NULL) return FALSE;
        if(1) //new type //�޸� ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Å©ï¿½â¿¡ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
        if(1) //new type //메모리 ì´ ê³µê°„ í¬ê¸°ì— ìƒê´€ì—†ì´
        {
            //if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE;
ReviewSystem/ReviewSystem/DlgSelfDiagnosis.cpp
@@ -70,8 +70,8 @@
            m_pDlgWsi->DisableBtSIMULATION(FALSE);
            break;
        case 7:
            m_pDlgWsi->UpdateWSIResult(0, 0, 0, 0, 0);
            m_pDlgWsi->UpdateWSIResult(1, 0, 0, 0, 0);
            //m_pDlgWsi->UpdateWSIResult(0, 0, 0, 0, 0);
            //m_pDlgWsi->UpdateWSIResult(1, 0, 0, 0, 0);
        default:
            break;
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.cpp
@@ -32,26 +32,24 @@
    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);
    DDX_Control(pDX, IDC_LIST_WSI_DIAGNOSIS_RESULT, m_ListWSIResult);
}
BOOL CDlgSelfDiagnosis_Wsi::OnInitDialog()
{
    CDialogEx::OnInitDialog();
    m_ListWSIResult.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
    m_ListWSIResult.InsertColumn(0, _T("Index"), LVCFMT_CENTER, 70);
    m_ListWSIResult.InsertColumn(1, _T("Left Module"), LVCFMT_CENTER, 100);
    m_ListWSIResult.InsertColumn(2, _T("Right Module"), LVCFMT_CENTER, 100);
    m_ListWSIResult.SetRedraw(TRUE);
    // TODO:  ì—¬ê¸°ì— ì¶”ê°€ ì´ˆê¸°í™” ìž‘업을 ì¶”가합니다.
    return TRUE;  // return TRUE unless you set the focus to a control
                  // ì˜ˆì™¸: OCX ì†ì„± íŽ˜ì´ì§€ëŠ” FALSE를 ë°˜í™˜í•´ì•¼ í•©ë‹ˆë‹¤.
}
@@ -67,6 +65,7 @@
void CDlgSelfDiagnosis_Wsi::OnBnClickedButtonSimulation()
{
    if (m_pDiagnosisManager == NULL) return;
    //#3514_LYW_CF AOI Review ìžê°€ì§„단 ê¸°ëŠ¥ ê°œì„ _START
@@ -135,65 +134,21 @@
    m_ctrlWsiRtb00.SetWindowTextA(strRTB00);
    m_ctrlWsiRtb01.SetWindowTextA(strRTB01);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[0]);
    m_editWSIHeight1.SetWindowTextA(strDiagnosisHeight);
    for (int i = 0; i < 10; i++)
    {
        int nRow = i + 1;
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[1]);
    m_editWSIHeight2.SetWindowTextA(strDiagnosisHeight);
        strDiagnosisHeight.Format(_T("%d"), nRow);
        m_ListWSIResult.InsertItem(nRow, strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[2]);
    m_editWSIHeight3.SetWindowTextA(strDiagnosisHeight);
        strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[i]);
        m_ListWSIResult.SetItemText(nRow, 1, strDiagnosisHeight);
    strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[3]);
    m_editWSIHeight4.SetWindowTextA(strDiagnosisHeight);
        strDiagnosisHeight.Format(_T("%d"), dDiagnosisHeight[i+10]);
        m_ListWSIResult.SetItemText(nRow, 2, 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);
        m_ListWSIResult.EnsureVisible(nRow, FALSE);
    }
    
}
@@ -226,6 +181,7 @@
    double nRTB00 = dRbt00;
    double nRTB01 = dRbt01;
    CString strDiagnosisHeight;
    CString strACC00, strACC01;
    CString strRTB00, strRTB01;
    strACC00.Format(_T("%f"),nACC00);
@@ -242,6 +198,36 @@
        m_ctrlWsiRtb01.SetWindowTextA(strRTB01);
    }
    double dDiagnosisHeightleft[10];
    double dDiagnosisHeightRight[10];
    for (int i = 0; i < 10; i++)
    {
        dDiagnosisHeightleft[i] = m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->GetDiagnosisHeight(i);
    }
    for (int i = 0; i < 10; i++)
    {
        dDiagnosisHeightRight[i] = m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->GetDiagnosisHeight(i);
    }
    m_ListWSIResult.DeleteAllItems();
    for (int i = 0; i < 10; i++)
    {
            int nRow = i;
            strDiagnosisHeight.Format(_T("%d"), nRow + 1);
            m_ListWSIResult.InsertItem(nRow, strDiagnosisHeight);
            strDiagnosisHeight.Format(_T("%.3f"), dDiagnosisHeightleft[i]);
            m_ListWSIResult.SetItemText(nRow, 1, strDiagnosisHeight);
            strDiagnosisHeight.Format(_T("%.3f"), dDiagnosisHeightRight[i]);
            m_ListWSIResult.SetItemText(nRow, 2, strDiagnosisHeight);
            m_ListWSIResult.EnsureVisible(nRow, FALSE);
    }
}
@@ -270,3 +256,4 @@
    // TODO:  ì—¬ê¸°ì— ì»¨íŠ¸ë¡¤ ì•Œë¦¼ ì²˜ë¦¬ê¸° ì½”드를 ì¶”가합니다.
}
ReviewSystem/ReviewSystem/DlgSelfDiagnosis_Wsi.h
@@ -18,6 +18,9 @@
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ì§€ì›ìž…니다.
    virtual BOOL OnInitDialog();
    CListCtrl m_ListWSIResult;
    DECLARE_MESSAGE_MAP()
public:
@@ -35,24 +38,5 @@
    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
@@ -124,6 +124,9 @@
    m_bIsOffSetOn = 0;
    m_bIsSimulation = 0;
    m_bFirstReviewLeft = 0;
    m_bFirstReviewRight = 0;
    // cs init
    InitializeCriticalSection(&m_csReviewResult);
    InitializeCriticalSection(&m_csReviewSignal);
@@ -3379,6 +3382,26 @@
    return m_pEdgeRecipeManager;
}
BOOL CReviewInterface::IRP2P_GetFirstReviewLeft()
{
    return m_bFirstReviewLeft;
}
BOOL CReviewInterface::IRP2P_GetFirstReviewRight()
{
    return m_bFirstReviewRight;
}
void CReviewInterface::IRP2P_SetFirstReviewLeft(BOOL b_Check)
{
    m_bFirstReviewLeft = b_Check;
}
void CReviewInterface::IRP2P_SetFirstReviewRight(BOOL b_Check)
{
    m_bFirstReviewRight = b_Check;
}
int CReviewInterface::PS2P_GetModuleStatusCount(int nModuleType)
{
@@ -3798,12 +3821,15 @@
    if (m_SequenceProcessor == NULL) return;
    m_SequenceProcessor->SetWsiType(9);
    if (!m_SequenceProcessor->WSIAllReadySignal(1))
    if (nModuleIdx == 0)
    {
        g_pLog->DisplayMessage(_T("[WSI] Send Ready Signal to All WIS Fail"));
        if (!m_SequenceProcessor->WSIAllReadySignal(1))
        {
            g_pLog->DisplayMessage(_T("[WSI] Send Ready Signal to All WIS Fail"));
            return;
        }
    }
    else
    {
        SetCurrentWsiMode(WsiMeasureType_VLSI);
        CWsiControl* pWsiControl = ISP2P_GetWSIControl(nModuleIdx);
@@ -3817,7 +3843,6 @@
        pWsiControl->SetWsiStart(1, vectorPosX, vectorPosY, 0);
    }
}
void CReviewInterface::IDP2P_WsiMotorMotionEnd(int nModuleIdx, double dPosX, double dPosY)
@@ -8379,6 +8404,26 @@
    return m_pDlgHistoryTool;
}
BOOL CReviewInterface::ISP2P_GetFirstReviewLeft()
{
    return m_bFirstReviewLeft;
}
BOOL CReviewInterface::ISP2P_GetFirstReviewRight()
{
    return m_bFirstReviewRight;
}
void CReviewInterface::ISP2P_SetFirstReviewLeft(BOOL b_Check)
{
    m_bFirstReviewLeft = b_Check;
}
void CReviewInterface::ISP2P_SetFirstReviewRight(BOOL b_Check)
{
    m_bFirstReviewRight = b_Check;
}
void CReviewInterface::ILCC2P_DisplayMessage( int nIndex, const TCHAR* lpstrFormat, ... )
{
ReviewSystem/ReviewSystem/ReviewInterface.h
@@ -256,6 +256,13 @@
    virtual void                        IRP2P_CompletePlanIndex(int nReviewStatus, int nPlanIndex);
    virtual void                        IRP2P_UpdateReviewProcessStatus(int nReviewStatus, int nPlanIndex=0);
    virtual CRecipeManager*                IRP2P_GetEdgeRecipeManager();
    virtual BOOL                        IRP2P_GetFirstReviewLeft();
    virtual BOOL                        IRP2P_GetFirstReviewRight();
    virtual void                        IRP2P_SetFirstReviewLeft(BOOL b_Check);
    virtual void                        IRP2P_SetFirstReviewRight(BOOL b_Check);
    BOOL    m_bFirstReviewLeft;
    BOOL    m_bFirstReviewRight;
    virtual BOOL                        IRP2P_SaveDefectMap(const CString& strPath);
@@ -398,6 +405,12 @@
    virtual CDlgSelfDiagnosis*            ISP2P_GetDlgDiagnosis();
    virtual CDlgReviewHistoryTool*        ISP2P_GetDlgHistory();
    virtual BOOL                        ISP2P_GetFirstReviewLeft();
    virtual BOOL                        ISP2P_GetFirstReviewRight();
    virtual void                        ISP2P_SetFirstReviewLeft(BOOL b_Check);
    virtual void                        ISP2P_SetFirstReviewRight(BOOL b_Check);
public: 
    virtual BOOL    ISP2P_Motor_CameraGo(int nModuleIndex, double dPosX, double dPosY, int nMoveAxis, BOOL bAutoSelectCamera=FALSE, BOOL bGoEnd=FALSE);
ReviewSystem/ReviewSystem/ReviewProcessor.h
@@ -76,6 +76,12 @@
    virtual void                    IRP2P_UpdateWSISelfDiagnosisResult();
    virtual BOOL                        IRP2P_GetFirstReviewLeft() = 0;
    virtual BOOL                        IRP2P_GetFirstReviewRight() = 0;
    virtual void                        IRP2P_SetFirstReviewLeft(BOOL b_Check) = 0;
    virtual void                        IRP2P_SetFirstReviewRight(BOOL b_Check) = 0;
};
typedef std::vector<CPoint>                    VectorPoint;
ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp
@@ -1278,19 +1278,17 @@
              }
          }
          if (pReviewResult->nModuleIdx == 0)
          if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft())
          {
              m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue;
              /* double dAverageGray = 0.0;
               if (CCHImageProcess::ImageAverage(pImageData, dAverageGray) == 1)
               {
                   m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dAverageGray;
               }*/
      }
          else
              m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE);
              m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue);
          }
          else if(pReviewResult->nModuleIdx == 1 && m_pRP2P->IRP2P_GetFirstReviewRight())
          {
              m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue;
              m_pRP2P->IRP2P_SetFirstReviewRight(FALSE);
              m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue);
          }
      }
    }
@@ -1311,13 +1309,16 @@
            dFocusValue = CalcFocusValue(imageConvert.GetImageBuffer(), imageConvert.GetWidth(), imageConvert.GetHeight());
        }
        if (pReviewResult->nModuleIdx == 0)
        if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft())
        {
            m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue;
            m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE);
        }
        else
        else if (pReviewResult->nModuleIdx == 1 && m_pRP2P->IRP2P_GetFirstReviewRight())
        {
            m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue;
            m_pRP2P->IRP2P_SetFirstReviewRight(FALSE);
        }
    }
    
@@ -1424,9 +1425,23 @@
            if (imageConvert.GetImageExist())
            {
                dFocusValue = CalcFocusValue(imageConvert.GetImageBuffer(), imageConvert.GetWidth(), imageConvert.GetHeight());
                if (pReviewResult->nModuleIdx == 0 && m_pRP2P->IRP2P_GetFirstReviewLeft())
                {
                    m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview00ImageContrast = dFocusValue;
                    m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE);
                    m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue);
                }
                else if (pReviewResult->nModuleIdx == 1 && m_pRP2P->IRP2P_GetFirstReviewRight())
                {
                    m_pRP2P->IRP2P_GetCurrentGlassResult()->nReview01ImageContrast = dFocusValue;
                    m_pRP2P->IRP2P_SetFirstReviewRight(FALSE);
                    m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue);
                }
            }
        
            // count defocus
            CGlassResult* pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult();
            if (pGlassResult)
ReviewSystem/ReviewSystem/ReviewSystem.rc
@@ -687,69 +687,8 @@
    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
    LTEXT           "um",IDC_STATIC,141,113,19,12
    CONTROL         "",IDC_LIST_WSI_DIAGNOSIS_RESULT,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,182,30,162,187
END
IDD_DLG_SELF_DIAGNOSIS_SETTING DIALOGEX 0, 0, 435, 379
ReviewSystem/ReviewSystem/SequenceProcessor.cpp
@@ -1882,9 +1882,11 @@
        if(pWsiControl == NULL) continue ;
        CRcpAFMRecipeInfo *pRcpWsiAFMInfo = pRsRcpReviewInfo->GetRcpWsiAFMRecipeInfo(nWsiControlIdx);
        if(pRcpWsiAFMInfo == NULL) continue ;
//         if(pRcpWsiAFMInfo == NULL) continue ;
//
//         int nRealMagIndex = GetRealMagnification(nWsiControlIdx, pRcpWsiAFMInfo->m_nZoomIndex);
        int nRealMagIndex = GetRealMagnification(nWsiControlIdx, pRcpWsiAFMInfo->m_nZoomIndex);
        int nRealMagIndex = 0;
    
        //pWsiControl->SetWsiReady(*pGlassResult->GetJobID(),_T("LGDemo"),2, 0); //TEST0716 
ReviewSystem/ReviewSystem/SequenceProcessor.h
@@ -484,6 +484,13 @@
    virtual CDlgSelfDiagnosis*            ISP2P_GetDlgDiagnosis() = 0;
    virtual CDlgReviewHistoryTool*        ISP2P_GetDlgHistory() = 0;
    virtual BOOL                        ISP2P_GetFirstReviewLeft() = 0;
    virtual BOOL                        ISP2P_GetFirstReviewRight() = 0;
    virtual void                        ISP2P_SetFirstReviewLeft(BOOL b_Check) = 0;
    virtual void                        ISP2P_SetFirstReviewRight(BOOL b_Check) = 0;
    virtual BOOL                        GetOffSetValue(int nModule, int nCam, int nScan, double dGlassXPos, double &dXpos, double &dYpos) = 0;
public:
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -946,6 +946,9 @@
    bFileFind = FALSE;
    m_pSP2P->ISP2P_GetDiagnosisHistory();
    m_pSP2P->ISP2P_SetFirstReviewLeft(TRUE);
    m_pSP2P->ISP2P_SetFirstReviewRight(TRUE);
    
    if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_LoadingAck_CPJT))
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Ack Signal!"));
ReviewSystem/ReviewSystem/resource.h
@@ -430,6 +430,7 @@
#define IDC_EDIT_WSI_HEIGHT11           1181
#define IDC_EDIT_WSI_HEIGHT12           1182
#define IDC_EDIT_WSI_HEIGHT13           1183
#define IDC_LIST_WSI_DIAGNOSIS_RESULT   1184
#define ID_INS_HOOK                     32772
#define ID_UNINS_HOOK                   32773
@@ -439,7 +440,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        381
#define _APS_NEXT_COMMAND_VALUE         32775
#define _APS_NEXT_CONTROL_VALUE         1181
#define _APS_NEXT_CONTROL_VALUE         1185
#define _APS_NEXT_SYMED_VALUE           346
#endif
#endif
ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisProcessor.h
@@ -49,7 +49,7 @@
    int ProcessFlatness();
    int ProcessFlatness_Manual();
    int ProcessSimulation();
    int ProcessDiagnosisJudge();
    int ProcessDiagnosisJudge(int nMode);
    BOOL CalculateSquareness(int nIndex);
protected: