SDC C-Project CF Review 프로그램
LYW
2022-03-30 e147f44d605bdce9c395c1fd66a88f6cc8106350
no message
15개 파일 변경됨
768 ■■■■■ 파일 변경됨
.gitignore 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/DitGlassRawStruct.h 556 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp 46 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/bin/ReviewHistroy.exe 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/CameraControlAlign.cpp 39 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/CameraControlAlign.h 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/CameraImageView.cpp 7 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/CameraImageView.h 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/CameraViewAlign.cpp 23 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DisplayMessage.cpp 8 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgAlignCamera.cpp 69 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgAlignCamera.h 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/MainFrm.cpp 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.cpp 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
.gitignore
@@ -43,7 +43,6 @@
*.manifest
*_manifest.rc
*.lastbuildstate
*.def
*.pch
*.pdb
*.idb
@@ -51,4 +50,5 @@
*.res
*.cache
*.unsuccessfulbuild
*.htm
*.htm
*.def
ReviewHistory/ReveiwHistory/DitGlassRawStruct.h
@@ -48,33 +48,78 @@
        memset(this, 0, sizeof(_grmGlassData));
    }
    //int
    int            m_nCellNum;
    int            m_nDefectNum;
    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_nGlassSizeWidth;
    int            m_nGlassSizeHeight;
    int            m_nVcrResultCode;
    //결함 갯수 관리 변수
    int            m_nDefectNumSizeSmall;
    int            m_nDefectNumSizeMid;
    int            m_nDefectNumSizeLarge;
    int            m_nDefectNumSizeHuge;
    int            m_nDefectNumSizeUltra;
    int            m_nDefectNumLocActive;
    int            m_nDefectNumLocPad;
    int            m_nDefectNumLocCrack;
    int            m_nDefectNumLocBM;
    int            m_nDefectNumTypeTB;
    int            m_nDefectNumTypeTW;
    int            m_nDefectNumTypeRB;
    int            m_nDefectNumTypeRW;
    int            m_nDefectNumTypeMD;
    int            m_nDefectNumTypeCD;
    int            m_nDefectNumTypeMC;
    int            m_nDefectNumJudgeOKWhite;
    int            m_nDefectNumJudgeOKBlack;
    int            m_nDefectNumJudgeNG;
    int            m_nDefectNumJudgeRW;
    int            m_nDefectNumJudgeRP;
    int            m_nDefectNumJudgeRV;
    int            m_nDefectNumJudgeTR;
    int            m_nDefectNumJudgePR;
    int            m_nDefectNumJudgeLine;
    int            m_nDefectNumStackTD;
    int            m_nDefectNumStackSD;
    int            m_nDefectNumStackPD;
    int            m_nDefectNumStackSP;
    int            m_nSlot_No;
    int            m_nReviewNum;
    int            m_nStackNum;
    int            m_nCutOffDefectNum;
    int            m_nRawMergeNum;
    //KYH ND 판정 추가
    int            m_nDefectNumJudgeND;
    //DUMY DATA
    int            Dumy_int[9];
    //double
    double        m_nAlignCcdTheta;
    double        m_nAlignCcdShitftX;
    double        m_nAlignCcdShitftY;
    double        m_nAlignPreTheta;
    double        m_nAlignPreShitftX;
    double        m_nAlignPreShitftY;
    double        m_nAlignBasicTheta;
    double        m_nAlignBasicShitftX;
    double        m_nAlignBasicShitftY;
    //DUMY DATA
    double        Dumy_double[10];
    //char
    //Glass 정보
    char m_strFileName[64];
    char m_strPath[256];
    int m_nCellNum;
    int m_nDefectNum;
    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_nGlassSizeWidth;
    int m_nGlassSizeHeight;
    //설비정보
    char m_strLine[32];
    char m_strEquipType[32];            
    char m_strEquipID[32];                
    char m_strStepID[32];            
    char m_strOperID[32];                
    CTime    m_tmGlassLoading;            //3. START_TIME
    CTime    m_tmInspectionStart;            //3. START_TIME
    CTime    m_tmInspectionEND;            //4. END_TIME
    CTime    m_tmReviewLoading;
    CTime    m_tmReviewEnd;
    //기본 물류정보
    char m_strGlassID[32];                //Glass ID
    char m_strPPID[32];                    
@@ -85,74 +130,16 @@
    char m_strGlassJudge[32];            //GLASS_JUDGE
    char m_strGlassCode[32];            //Grade or Code
    char m_strProductID[16];            //4. PRODUCT_ID
    //VCR
    int m_nVcrResultCode;
    char m_strVCRResult[32];
    char m_strVCRGlassID[32];
    //결함 갯수 관리 변수
    int            m_nDefectNumSizeSmall;
    int            m_nDefectNumSizeMid;
    int            m_nDefectNumSizeLarge;
    int            m_nDefectNumSizeHuge;
    int            m_nDefectNumSizeUltra;
    int            m_nDefectNumLocActive;
    int            m_nDefectNumLocPad;
    int            m_nDefectNumLocCrack;
    int            m_nDefectNumLocBM;
    int            m_nDefectNumTypeTB;
    int            m_nDefectNumTypeTW;
    int            m_nDefectNumTypeRB;
    int            m_nDefectNumTypeRW;
    int            m_nDefectNumTypeMD;
    int            m_nDefectNumTypeCD;
    int            m_nDefectNumTypeMC;
    int            m_nDefectNumJudgeOKWhite;
    int            m_nDefectNumJudgeOKBlack;
    int            m_nDefectNumJudgeNG;
    int            m_nDefectNumJudgeRW;
    int            m_nDefectNumJudgeRP;
    int            m_nDefectNumJudgeRV;
    int            m_nDefectNumJudgeTR;
    int            m_nDefectNumJudgePR;
    int            m_nDefectNumStackTD;
    int            m_nDefectNumStackSD;
    int            m_nDefectNumStackPD;
    int            m_nDefectNumStackSP;
    //카메라/스캔 정보 [김태현 2018/12/5]
    short        m_nCameraNum;
    short        m_nScanNum;
    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]
    double    m_nAlignCcdTheta;
    double    m_nAlignCcdShitftX;
    double    m_nAlignCcdShitftY;
    double    m_nAlignPreTheta;
    double    m_nAlignPreShitftX;
    double    m_nAlignPreShitftY;
    double    m_nAlignBasicTheta;
    double    m_nAlignBasicShitftX;
    double    m_nAlignBasicShitftY;
    char    m_strAlignFirst[64];
    char    m_strAlignSecond[64];
//     char    m_strAlignPath[256];
    //CSOT용 물류 정보 [김태현 2018/12/5]
    char m_strCassetteSequenceNo[16];
    char m_strOwnerCode[16];            //2. OWNER_CODE
    char m_strOwnerType[16];            //3. OWNER_TYPE
    char m_strProcessID[21];            //5. PROCESS_ID
    char m_strProductGroup[16];            //6. PRODUCT_GROUP
    char m_strCSTID[16];                //8. CST_ID
@@ -162,7 +149,6 @@
    char m_strPreRecipeID[32];            //13.PRE_RECIPE_ID
    char m_strGroupID[16];                //14.GROUP_ID
    char m_cAutoSampleFlag;                //15.AUTOSAMPLEFLAG
    // CPRJ용 물류 정보
    char m_strProdType[3];
    char m_strBatchID[13];
@@ -175,35 +161,53 @@
    char m_strFlowHistory[2];
    char m_strCount1[2];
    char m_strCount2[2];
    //Mura Data 0412 nwh
    char m_strMaxAvgGray[12];
    char m_strMaxPortion[12];
     //1226NWH
    char m_strReadingFlag[2];
    BYTE m_nUniqueID[4];
    int m_nSlot_No;
    BYTE m_nGlassDataBitSignal[4];
    bool m_bJob_end;
    //201217 CJH - 찍은 Defect Review 개수
    int m_nReviewNum;
    //201221 CJH - 파싱한 Stack 결과
    int m_nStackNum;
    BOOL m_bStackRead;
    int m_nRawMergeNum;
    BOOL m_bRawMergeRead;
    //210203 CJH - CutOff 대상 결함 수
    int m_nCutOffDefectNum;
    //210323 CJH - Server/Frame Shrink 정보 추가
    char m_strShrinked[6];
    //210326 CJH - RAW 입력 Defect 수량 상한 사용여부
    BOOL m_bRawCutoff;
    char m_strReadingFlag[2];
    char m_StrMergeList[10][12];
    //DUMY DATA
    char m_strRawMergeStepID[32];
    char Dumy_char[104];
    //unsigned char
    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];
    //DUMY DATA
    unsigned char Dumy_unsigned_char[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
    //CTime
    CTime    m_tmGlassLoading;            //3. START_TIME
    CTime    m_tmInspectionStart;            //3. START_TIME
    CTime    m_tmInspectionEND;            //4. END_TIME
    CTime    m_tmReviewLoading;
    CTime    m_tmReviewEnd;
    //DUMY DATA
    CTime    Dumy_CTime[10];
    //short
    short        m_nCameraNum;
    short        m_nScanNum;
    //DUMY DATA
    short        Dumy_short[10];
    //BYTE
    BYTE m_nUniqueID[4];
    BYTE m_nGlassDataBitSignal[4];
    //DUMY DATA
    BYTE Dumy_BYTE[10];
    //BOOL
    BOOL m_bJob_end;
    BOOL m_bStackRead;
    BOOL m_bRawMergeRead;
    BOOL m_bRawCutoff;
    BOOL m_bEdgeCrackUse;
    BOOL m_bRawMergeUse;
    //DUMY DATA
    BOOL Dumy_BOOL[9];
};
struct _grmBlockData
{
@@ -211,10 +215,12 @@
    {
        memset(this, 0, sizeof(_grmBlockData));
    }
    //char
    char m_strBlockID[16];                //1. BLOCK_ID
    char m_cBlockJudgeAOI;                //2. BLOCK_JUDGE_AOI
    char m_cBlockJudgeATS;                //4. BLOCK_JUDGE_ATS
    char m_cBlockJudgeTEG;                //5. BLOCK_JUDGE_TEG
    //int
    int m_nGlassIdDCR;                    //22. GLASS_ID_DCR
};
struct _grmCellData
@@ -224,32 +230,27 @@
        memset(this, 0, sizeof(_grmCellData));
    }
    int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; };
    int                        m_nCellID;                            //1. PANEL_ID
    short                    m_nModelIdx;                // 몇 번째 모델인가?
    char                    m_strCellName[32];
    int                        m_rectCellLeft;
    int                        m_rectCellTop;
    int                        m_rectCellRight;
    int                        m_rectCellBottom;
    int/*Judgement*/        m_nJudgement;
    int                        m_nJudgeFlag;
    int                        m_nJudgeGlade;
    //int
    int            m_nCellID;                            //1. PANEL_ID
    int            m_rectCellLeft;
    int            m_rectCellTop;
    int            m_rectCellRight;
    int            m_rectCellBottom;
    /*Judgement*/
    int            m_nJudgement;
    int            m_nJudgeFlag;
    int            m_nJudgeGlade;
    //결함 갯수 관리 변수
    int            m_nDefectNumSizeSmall;
    int            m_nDefectNumSizeMid;
    int            m_nDefectNumSizeLarge;
    int            m_nDefectNumSizeHuge;
    int            m_nDefectNumSizeUltra;
    int            m_nDefectNumLocActive;
    int            m_nDefectNumLocPad;
    int            m_nDefectNumLocCrack;
    int            m_nDefectNumLocBM;
    int            m_nDefectNumTypeTB;
    int            m_nDefectNumTypeTW;
    int            m_nDefectNumTypeRB;
@@ -257,7 +258,38 @@
    int            m_nDefectNumTypeMD;
    int            m_nDefectNumTypeCD;
    int            m_nDefectNumTypeMC;
    int            m_nDefectNumJudgeOKWhite;
    int            m_nDefectNumJudgeOKBlack;
    int            m_nDefectNumJudgeNG;
    int            m_nDefectNumJudgeRW;
    int            m_nDefectNumJudgeRP;
    int            m_nDefectNumJudgeRV;
    int            m_nDefectNumJudgeTR;
    int            m_nDefectNumJudgePR;
    int            m_nDefectNumJudgeLine;
    int            m_nReflowResult[8];            // 0: Reflow X 1: Reflow OK 2: Reflow NG
    // Filtering된 Stack별 수
    int            m_nDefectTDCount;
    int            m_nDefectSDCount;
    int            m_nDefectPDCount;
    int            m_nDefectSPCount;
    // Gate/Data 총 갯수
    int            m_nGateNum;
    int            m_nDataNum;
    // 210129 CJH - Cell Origin 방향
    int            m_nCellXDir;
    int            m_nCellYDir;
    //KYH ND 판정 추가
    int            m_nDefectNumJudgeND;
    //DUMY DATA
    int            Dumy_int[9];
    //double
    //DUMY DATA
    double            Dumy_double[10];
    //char
    char        m_strCellName[32];
    //Mura Data nwh 0404 
    char        m_strProImage[32];
    char        m_strAvgGray_0[12];
@@ -269,7 +301,6 @@
    char        m_strFFTVah_0[12];
    char        m_strFFTVaq_0[12];
    char        m_strFFTPK_0[12];
    char        m_strAvgGray_1[12];
    char        m_strPortion_1[12];
    //kyh Mura Data 추가 0622
@@ -279,7 +310,6 @@
    char        m_strFFTVah_1[12];
    char        m_strFFTVaq_1[12];
    char        m_strFFTPK_1[12];
    char        m_strAvgGray_2[12];
    char        m_strPortion_2[12];
    //kyh Mura Data 추가 0622
@@ -289,7 +319,6 @@
    char        m_strFFTVah_2[12];
    char        m_strFFTVaq_2[12];
    char        m_strFFTPK_2[12];
    char        m_strAvgGray_3[12];
    char        m_strPortion_3[12];
    //kyh Mura Data 추가 0622
@@ -299,31 +328,28 @@
    char        m_strFFTVah_3[12];
    char        m_strFFTVaq_3[12];
    char        m_strFFTPK_3[12];
    //DUMY DATA
    char        Dumy_char[256];
    int            m_nDefectNumJudgeOKWhite;
    int            m_nDefectNumJudgeOKBlack;
    int            m_nDefectNumJudgeNG;
    int            m_nDefectNumJudgeRW;
    int            m_nDefectNumJudgeRP;
    int            m_nDefectNumJudgeRV;
    int            m_nDefectNumJudgeTR;
    int            m_nDefectNumJudgePR;
    //unsigned char
    int            m_nReflowResult[8];            // 0: Reflow X 1: Reflow OK 2: Reflow NG
    //CTime
    // Filtering된 Stack별 수
    int            m_nDefectTDCount;
    int            m_nDefectSDCount;
    int            m_nDefectPDCount;
    int            m_nDefectSPCount;
    //short
    short        m_nModelIdx;                // 몇 번째 모델인가?
    //DUMY DATA
    short        Dumy_short[10];
    // Gate/Data 총 갯수
    int            m_nGateNum;
    int            m_nDataNum;
    //BYTE
    //DUMY DATA
    BYTE        Dumy_BYTE[10];
    // 210129 CJH - Cell Origin 방향
    int            m_nCellXDir;
    int            m_nCellYDir;
    //BOOL
    //DUMY DATA
    BOOL        Dumy_BOOL[10];
};
struct _grmDefectReviewData
@@ -333,46 +359,64 @@
        memset(this, 0, sizeof(_grmDefectReviewData));
    }
    //////////////////////////////////////////////////////////////////////////
    //여기서 부터 리뷰 영역 [김태현 2019/1/19]
    ditRaw::ReviewPlanType            m_nPlanType    ;    
    //int
    int            m_nResultCode;  //0:None, 1:Success
    int            m_nShotIndex; //리뷰 찍은 순번 [김태현 2018/12/5]
    int            m_nModuleIndex;
    int            m_nMagnificIndex;
    float        m_fManification;
    float        m_fManificResoultion;
    char        m_strRevImageName[256];
    char        m_strRevImagePath[256];
    //////////////////////////////////////////////////////////////////////////
    // 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영역
    int            m_nWsi_ResultCode; //0:None, 1:Success
    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];
    int            m_nWsiReflowPositionIndex;                    // WsiReflowPositionIndex
    int            m_nWsi_pReflowResultData[8];
    double        m_dWsi_DamDistance;
    double        m_dWsiMmMotorX;                                // WSI 모터 좌표 20180223 HJH
    double        m_dWsiMmMotorY;
    float        m_fWsiManification;                            // WSI 배율
    //////////////////////////////////////////////////////////////////////////
    // 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
    float        m_fReflow_LinePosData[8];
    int            m_nReflow_Side;
    int            m_nReflow_InspectionMode;
    //DUMY DATA
    int            Dumy_int[10];
    //double
    double        m_dWsi_DamDistance;
    double        m_dWsiMmMotorX;                                // WSI 모터 좌표 20180223 HJH
    double        m_dWsiMmMotorY;
    //DUMY DATA
    double        Dumy_double[10];
    //char
    char        m_strRevImageName[256];
    char        m_strRevImagePath[256];
    char        m_strWsi_2DImageFilename[256];
    char        m_strWsi_3DImageFilename[256];
    //DUMY DATA
    char        Dumy_char[256];
    //unsigned char
    //CTime
    //short
    //BYTE
    //DUMY DATA
    BYTE Dumy_BYTE[10];
    //BOOL
    //DUMY DATA
    BOOL Dumy_BOOL[10];
    //float
    float        m_fManification;
    float        m_fManificResoultion;
    float        m_fMesure_ResultData[8];    // 0:Type, 1:ShiftX, 2:ShiftY
    float        m_fWsi_ResultData[8];            // 0:Type, 1:Height(um), 2:Width
    float        m_fWsiManification;                            // WSI 배율
    float        m_fReflow_LinePosData[8];
    //DUMY DATA
    float        Dumy_float[10];
};
struct _grmDefectData
@@ -382,20 +426,81 @@
        memset(this, 0, sizeof(_grmDefectData));
    }
    _grmDefectReviewData m_ReviewDefect;
    //int
    int                m_nDefectIdx;                // 카메라에서의 결함 인덱스 201207 CJH - 자릿 수 넘침. int형으로 변경
    int                m_nPixelConv;                // pixel 단위 좌표
    int                m_nPixelScan;                // pixel 단위 좌표
    int                m_nDefectRScale;            // 픽셀단위 결함 높이    -------------------------RS
    int                m_nPixelGlassStart;            // Glass 시작 픽셀
    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단위 크기.
    int                m_nPadRegionIdx;            // PAD 영역 인덱스
    int                m_nUMCellX;                    // 셀 원점 기준 x 좌표
    int                m_nUMCellY;                    // 셀 원점 기준 y 좌표
    int                m_nUMShotX;                    // 샷 기준 X좌표
    int                m_nUMShotY;                    // 샷 기준 Y좌표
    int                m_StackInfo;                // Stack Flag
    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 핵 높이
    int                m_nDefectMerge;        // 현재 디펙의 머지 여부
    int                m_nPixelSizeOrigin;
    int                m_nScratchRatio;
    int                m_nDensity;            // 원형 결함 구분을 위한 밀도 [2017.8.2 bhs]
    int                m_nAngle;                    // 각도
    int                m_nMajor;                    // 장축 길이(Long)
    int                m_nMinor;                    // 단축 길이(Short)
    int                m_nCompact;                    // Blob 장축을 지름으로 하는 원의 넓이와 Blob 넓이의 비율
    int                m_nThickness;                // Blob 넓이와 장축의 비율 (Area / Major)
    int                m_nHliLayers;                // 해당결함에 포함된 레이어 bit처리
    int                m_nAlignRectLeft;
    int                m_nAlignRectTop;
    int                m_nAlignRectBottom;
    int                m_nAlignRectRight;
    //DUMY DATA
    int                Dumy_int[10];
    //double
    double            m_dScanResolution;
    double            m_dConvResolution;
    //DUMY DATA
    double            Dumy_double[10];
    //char
    char            m_strStackFirst[60];            // Stack Step. //201221 CJH - 최대 사이즈 60bytes
    char            m_strUnitID[16];                // 유닛아이디
    char            m_strDefectCode[32];            // Defect Code
    char            m_strAoiImageName[256];            // Defect Image Name(CCD Image)
    char            m_strDefectName[16];
    char            m_strDefectType[16];
    char            m_strAoiImagePath[255];
    char            m_strReviewImagePath[255];
    char            m_strLNDefectCode[12];
    //DUMY DATA
    char             Dumy_char[256];
    //unsigned char
    //CTime
    //short
    short            m_nDefectID;
    short            m_nCameraID;
    short            m_nScanIdx;
    //short            m_nDefectIdx;                // 카메라에서의 결함 인덱스
    int                m_nDefectIdx;                // 카메라에서의 결함 인덱스 201207 CJH - 자릿 수 넘침. int형으로 변경
    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_sPixelWidth;                // 픽셀단위 결함 너비
    short            m_sPixelHeight;                // 픽셀단위 결함 높이
    short            m_nLevelSrcMin;                // 결함 밝기 Min    -----------------------------SN
@@ -407,114 +512,62 @@
    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_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_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
    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 영역 인덱스
    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/*MAP16_DefectClass*/        m_DefectClass;                // BOE Defect Class 16등분 구분
    short            m_nMaskDefectIdx;            // 한 Glass에서 발견된 마스크결함 묶음의 인덱스.
    short            m_nShotIdx;                    // 노광샷 번호
    short            m_nMatchShotCount;            // 동일한 마스크 결함의 수.
    short            m_nMatchMaxSize;            // 동일한 마스크 중 가장 큰 결함의 크기.
    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를 선택하는 인덱스.
    //CString            m_strStackStep[CFDEFECT_STACKCOUNT];            // Stack Step.
    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;                // 결함 종류
    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_nPixelSizeOrigin;
    int                m_nScratchRatio;
    int                m_nDensity;            // 원형 결함 구분을 위한 밀도 [2017.8.2 bhs]
    char            m_strDefectName[16];
    char            m_strDefectType[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)
    short            m_nHliLevelIdx;                // 몇 번째 레벨(채널)인가?
    int                m_nHliLayers;                // 해당결함에 포함된 레이어 bit처리
    short/*LineDefectType*/ m_LineDefectType;
    //DUMY DATA
    short            Dumy_short[100];
    //BYTE
    //DUMY DATA
    BYTE Dumy_BYTE[10];
    //BOOL
    BOOL            m_bDefectCutoff;            // 컷 오프 디펙(TRUE= Cutoff, FALSE)
    BOOL            m_bRealStack;                // Stack 머지에 의한 TD(TRUE) 인지, 필터링에 의한 TD(FALSE)구분할 수 있다.
    BOOL            m_bMergeState;                // Merge Status
    BOOL            m_bShrinked;                //210323 CJH - Frame Shrink 정보 추가
    //DUMY DATA
    BOOL Dumy_BOOL[10];
    char            m_strAoiImagePath[255];
    char            m_strReviewImagePath[255];
    //float
    int                m_nAlignRectLeft;
    int                m_nAlignRectTop;
    int                m_nAlignRectBottom;
    int                m_nAlignRectRight;
    _grmDefectReviewData m_ReviewDefect;
    //CRect
    CRect            m_RectUM;                    // 디펙 센터 기준 사각형.
    //CString            m_strStackStep[CFDEFECT_STACKCOUNT];            // Stack Step.
};
@@ -560,13 +613,14 @@
{
    //공유 메모리 생성할 공간 결정 [김태현 2018/11/12]
    size_t m_nGlassRawDataSize;
    //int
    int m_nGlassMaxDataNum;
    int m_nBlockMaxDataNum;
    int m_nCellMaxDataNum;
    int m_nDefectMaxDataNum;
    int m_nStackMaxDataNum;
    int m_nRawMergeMaxDataNum;
    //Char 기준 자료가 있는 시작 위치 [김태현 2018/11/12]
    int m_nGlassDataPoint;
    int m_nBlockDataPoint;
@@ -574,13 +628,14 @@
    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;
    //DUMY DATA
    int            Dumy_int[10];
};
struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand
{
@@ -727,24 +782,37 @@
    size_t m_nGlassRawDataSize;
    //int
    int m_nGlassMaxDataNum;
    int m_nBlockMaxDataNum;
    int m_nCellMaxDataNum;
    int m_nDefectMaxDataNum;
    int m_nStackMaxDataNum;
    int m_nGlassDataPoint;
    int m_nBlockDataPoint;
    int m_nCellDataPoint;
    int m_nDefectDataPoint;
    int m_nStackDataPoint;
    int m_nSizeOfGlassData;
    int m_nSizeOfBlockData;
    int m_nSizeOfCellData;
    int m_nSizeOfDefectData;
    int m_nSizeOfStackData;
    //DUMY DATA
    int            Dumy_int[10];
    //DUMY DATA
    double        Dumy_double[10];
    //DUMY DATA
    char        Dumy_char[256];
    //DUMY DATA
    short        Dumy_short[10];
    //DUMY DATA
    BYTE        Dumy_BYTE[10];
    //DUMY DATA
    BOOL        Dumy_BOOL[10];
private:
    //bool
    bool m_bRefAlloc;
};
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
@@ -928,7 +928,11 @@
                    //ImageShow(pDefectInfo->m_nDefectID);
                    if (!m_bDefectAll)
                    {
                        ImageShow(pDispInfo->item.row - 1);
                        /*< LYW 20211221 - #5000 ADD Start >*/
                        ImageShow(pDefectInfo->m_nDefectID);
                        /*< LYW 20211221 - #5000 ADD End >*/
                        //origin
                        //ImageShow(pDispInfo->item.row - 1);
                    }
                    else
                    {
@@ -938,12 +942,15 @@
                    //정렬 순서를 사용자가 원하는 순으로 하자
                    if (!m_bDefectAll)
                    {
                        m_sldImg.SetPos(pDispInfo->item.row - 1);
                        int nPos = m_sldImg.GetPos();
                        CString strPos;
                        strPos.Format(_T("%d"), nPos);
                        m_ctrCount.SetWindowText(strPos);
                        /*< LYW 20211221 - #5000 Delete Start >*/
//                         m_sldImg.SetPos(pDispInfo->item.row - 1);
//
//                         int nPos = m_sldImg.GetPos();
//                         CString strPos;
//                         strPos.Format(_T("%d"), nPos);
//                         m_ctrCount.SetWindowText(strPos);
                        /*< LYW 20211221 - #5000 Delete End >*/
                    }
                }
            }
@@ -1232,7 +1239,11 @@
        {
            if (m_Formation.m_vecImage[i].m_nDefectID == nSelectDefect)
            {
                ImageShow(i);
                /*< LYW 20211221 - #5000 ADD Start >*/
                ImageShow(nSelectDefect);
                /*< LYW 20211221 - #5000 ADD End >*/
                //origin
                //ImageShow(i);
                break;
            }
        }
@@ -2150,8 +2161,16 @@
        if (!m_bDefectAll)
        {
            nIndex = nDefectID;
            break;
            /*< LYW 20211221 - #5000 ADD Start >*/
            if (pImage->m_nDefectID == nDefectID)
            {
                nIndex = i;
                break;
            }
            /*< LYW 20211221 - #5000 ADD End >*/
            //Origin
//             nIndex = nDefectID;
//             break;
        }
        else
        {
@@ -2397,8 +2416,11 @@
        _akReviewList* pImageInfo = &m_Formation.m_vecImage[nPos];
        m_FormationMap.setSelectDefect(pImageInfo->m_nDefectID);
        //ImageShow(pImageInfo->m_nDefectID/*nPos*/);
        ImageShow(nPos);
        /*< LYW 20211221 - #5000 ADD Start >*/
        ImageShow(pImageInfo->m_nDefectID/*nPos*/);
        /*< LYW 20211221 - #5000 ADD End >*/
        //Origin
        //ImageShow(nPos);
        setDefectShow(pImageInfo->m_nDefectID, 1);
    }
}
ReviewHistory/bin/ReviewHistroy.exe
Binary files differ
ReviewSystem/ReviewSystem/CameraControlAlign.cpp
@@ -19,6 +19,8 @@
    m_pVectorAlignLightControl = NULL;
    m_nViewMode = 0;
    m_strSaveImageBasePath = _T("");
    m_strSaveImageOKPath = _T("");
    m_strSaveImageNGPath = _T("");
    m_nAlignType = FALSE;
@@ -444,6 +446,16 @@
    m_strSaveImageBasePath = strPath;
}
void CCameraControlAlign::SetSaveImageOKPath(CString strPath)
{
    m_strSaveImageOKPath = strPath;
}
void CCameraControlAlign::SetSaveImageNGPath(CString strPath)
{
    m_strSaveImageNGPath = strPath;
}
CCameraControl* CCameraControlAlign::GetCameraControl(int nCameraIndex)
{
    for (VectorCameraControlIt it=m_vecCameraControl.begin(); it!=m_vecCameraControl.end(); it++)
@@ -764,6 +776,33 @@
        m_AlignResult.strAlignSecond = strPath;
    }
    if (m_AlignResult.nFindAlign[nCameraIdx] == 1)
    {
        CreateDirectory(m_strSaveImageOKPath, NULL);
        // save threshold image
        strPath.Format(_T("%s\\Cam%02d_Align_OK_TH_%04d%02d%02d%02d%02d%02d.jpg"), m_strSaveImageOKPath, nCameraIdx,
            time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
        pAlignFinder->SaveThresholdImage(strPath);
        // save Result Image 20210208 얼라인 결과 저장
        strPath.Format(_T("%s\\Cam%02d_AlignResultOK_%04d%02d%02d%02d%02d%02d.jpg"), m_strSaveImageOKPath, nCameraIdx,
            time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
        pAlignFinder->SaveResultImage(strPath);
    }
    else
    {
        CreateDirectory(m_strSaveImageNGPath, NULL);
        // save threshold image
        strPath.Format(_T("%s\\Cam%02d_Align_NG_TH_%04d%02d%02d%02d%02d%02d.jpg"), m_strSaveImageNGPath, nCameraIdx,
            time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
        pAlignFinder->SaveThresholdImage(strPath);
        // save Result Image 20210208 얼라인 결과 저장
        strPath.Format(_T("%s\\Cam%02d_AlignResultNG_%04d%02d%02d%02d%02d%02d.jpg"), m_strSaveImageNGPath, nCameraIdx,
            time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
        pAlignFinder->SaveResultImage(strPath);
    }
    // update matching image
    pAlignFinder->GetBlobImage(pCameraImage->GetImageData(View_Matching));
ReviewSystem/ReviewSystem/CameraControlAlign.h
@@ -142,6 +142,8 @@
    BOOL GetResultImage(int nCameraIndex, CCHImageData* pImageData);
    BOOL SaveResultImage(int nCameraIndex, const CString& strFilename);
    void SetSaveImageBasePath(CString strPath);
    void SetSaveImageOKPath(CString strPath);
    void SetSaveImageNGPath(CString strPath);
    void SetAlignType(BOOL nAlignType);
    //#3357 KYH Align Image 초기화 ADD START
    void SetAlignClearImage(); 
@@ -193,6 +195,8 @@
    int                            m_nProcessStatus;
    int                            m_nViewMode;
    CString                        m_strSaveImageBasePath;
    CString                        m_strSaveImageOKPath;
    CString                        m_strSaveImageNGPath;
    CAlignRecipe                m_AlignRecipe;
    CAlignResult                m_AlignResult; 
    VectorAutoLightControl        m_vecAutoLightControl;
ReviewSystem/ReviewSystem/CameraImageView.cpp
@@ -28,9 +28,12 @@
    m_rtClientRect    = CRect(0,0,0,0);
    m_bDrawCenterLine = FALSE;
    m_bDrawRuler        = FALSE;
    m_bDrawViewName = FALSE;
    m_bDrawViewName = TRUE;
    m_nViewBand        = BandTypeColor;
    m_nDrawMode        = 1;
    d_MatchingRate = 0.;
    d_FindScore = 0.;
    m_dWidthScale    = 1.0; 
    m_dHeightScale    = 1.0;
@@ -619,7 +622,7 @@
    // Do something with the font just created...
    CFont* def_font = pDC->SelectObject(&font);
    pDC->SetTextColor(RGB(255,255,255));
    //pDC->SetTextColor(RGB(255,255,255));
    pDC->SetBkMode(TRANSPARENT);
    int nStrLength = (m_strViewName.GetLength() * 10);
ReviewSystem/ReviewSystem/CameraImageView.h
@@ -34,6 +34,8 @@
    DECLARE_DYNAMIC(CCameraImageView)
public:
    double d_MatchingRate;
    double d_FindScore;
    CCameraImageView(CWnd *pParentWnd);
    virtual ~CCameraImageView();
    void SetCIV2P(ICameraImageView2Parent* pCIV2P)        { m_pCIV2P = pCIV2P; }
ReviewSystem/ReviewSystem/CameraViewAlign.cpp
@@ -11,6 +11,7 @@
IMPLEMENT_DYNAMIC(CCameraViewAlign, CCameraImageView)
CCameraViewAlign::CCameraViewAlign(CWnd *pParentWnd) : CCameraImageView(pParentWnd)
{
    m_bDrawROIRect = TRUE;
@@ -171,6 +172,28 @@
{
    CCHBufferDC *pDC = new CCHBufferDC(this); // device context for painting
    // LYW 20200810 수정
    if (d_FindScore != 0)
    {
        if (d_FindScore > d_MatchingRate)
        {
            pDC->SetTextColor(RGB(0, 255, 0));
        }
        else if (d_FindScore < d_MatchingRate)
        {
            pDC->SetTextColor(RGB(255, 0, 0));
        }
        else
        {
            pDC->SetTextColor(RGB(255, 255, 255));
        }
    }
    else
    {
        pDC->SetTextColor(RGB(255, 255, 255));
    }
    UpdateImageView(pDC);
    if (m_bDrawROIRect) DrawROIRect(pDC);
ReviewSystem/ReviewSystem/DisplayMessage.cpp
@@ -33,7 +33,9 @@
void CDisplayMessage::SetPath(const CString& strPath)
{
    m_strLogPath = strPath;
    CString m_GlobalLogPath;
    m_strLogFile.Format(_T("D:\\DIT_LogData\\%04d%02d%02d"), m_strLogPath, m_TimeLogFile.GetYear(), m_TimeLogFile.GetMonth(), m_TimeLogFile.GetDay());
    CreateDirectory(m_strLogFile, NULL);
    CreateDirectory(m_strLogPath, NULL);
    MakeLogFile();
@@ -42,6 +44,10 @@
BOOL CDisplayMessage::MakeLogFile()
{
    // Log 처리
    CString m_GlobalLogPath;
    m_strLogFile.Format(_T("D:\\DIT_LogData\\%04d%02d%02d"), m_TimeLogFile.GetYear(), m_TimeLogFile.GetMonth(), m_TimeLogFile.GetDay());
    CreateDirectory(m_strLogFile, NULL);
    if (m_strLogPath.IsEmpty())
        return FALSE;
ReviewSystem/ReviewSystem/DlgAlignCamera.cpp
@@ -34,6 +34,8 @@
    }
    m_vecCameraImageView.clear();
    int nSize = (int)m_vecCameraImageView.size();
    d_MatchingRate = 0.;
    m_bAlignResultUpdate = FALSE;
    m_pDAC2P = NULL;
}
@@ -557,6 +559,7 @@
        strValue = _T("Find Fail");
        m_ctrlAlignResult.SetGradientColor(RGB(255,0,0));
        SetImageMode(View_Camera);
        m_bAlignResultUpdate = TRUE;
        break;
    case -1:
@@ -575,6 +578,7 @@
        strValue = _T("Success");
        m_ctrlAlignResult.SetGradientColor(RGB(0,255,0));
        SetImageMode(View_Camera);
        m_bAlignResultUpdate = TRUE;
        break;
    case 2:
@@ -608,6 +612,7 @@
            m_AlignResult.Reset();
            m_sPreAlignResult.Reset();
            m_sPostAlignResult.Reset();
            d_MatchingRate = pGlassResult->m_AlignRecipe.dMatchingRate;
            CCoordCalibrator* pCal = m_pDAC2P->DAC2P_GetCoordCalibrator();
            if (pCal)
@@ -783,12 +788,15 @@
    if (nIDEvent==1000)
    {
        KillTimer(nIDEvent);
        int TempScore0;
        int TempScore1;
        int nViewIndex = 2;
        for (VectorCameraImageViewIt it=m_vecCameraImageView.begin(); it!=m_vecCameraImageView.end(); it++)
        {
            if (m_SharedImageData.GetUpdated(nViewIndex))
            if (m_SharedImageData.GetUpdated(nViewIndex) || m_bAlignResultUpdate == TRUE)
            {
                if (m_bAlignResultUpdate == TRUE) m_bAlignResultUpdate = FALSE;
                if (m_SharedImageData.LockImageData(nViewIndex))
                {
                    const SSharedImageInfo* pImageInfo = m_SharedImageData.GetImageInfo(nViewIndex);
@@ -802,13 +810,66 @@
                            (*it)->SetRulerGab(pImageInfo->dRulerGab);        // um
                            (*it)->SetResolution(pImageInfo->dResolution);    // um
                            
                            switch(pImageInfo->nCameraIndex)
                            switch (pImageInfo->nCameraIndex)
                            {
                            case 0:
                                (*it)->SetViewName(_T("1st"));
                                (*it)->d_FindScore = m_AlignResult.dFindScore[0];
                                (*it)->d_MatchingRate = d_MatchingRate;
                                TempScore0 = m_AlignResult.dFindScore[0] * 100;
                                if ((*it)->d_FindScore != 0)
                                {
                                    if ((*it)->d_FindScore > (*it)->d_MatchingRate)
                                    {
                                        CString TempStr;
                                        TempStr.Format(_T("1st OK %d%%"), TempScore0);
                                        (*it)->SetViewName(TempStr);
                                    }
                                    else if ((*it)->d_FindScore < (*it)->d_MatchingRate)
                                    {
                                        CString TempStr;
                                        TempStr.Format(_T("1st NG %d%%"), TempScore0);
                                        (*it)->SetViewName(TempStr);
                                    }
                                    else
                                    {
                                        (*it)->SetViewName(_T("1st"));
                                    }
                                }
                                else
                                {
                                    (*it)->SetViewName(_T("1st"));
                                }
                                break;
                            case 1:
                                (*it)->SetViewName(_T("2nd"));
                                (*it)->d_FindScore = m_AlignResult.dFindScore[1];
                                (*it)->d_MatchingRate = d_MatchingRate;
                                TempScore1 = m_AlignResult.dFindScore[1] * 100;
                                if ((*it)->d_FindScore != 0)
                                {
                                    if ((*it)->d_FindScore > (*it)->d_MatchingRate)
                                    {
                                        CString TempStr;
                                        TempStr.Format(_T("2nd OK %d%%"), TempScore1);
                                        (*it)->SetViewName(TempStr);
                                    }
                                    else if ((*it)->d_FindScore < (*it)->d_MatchingRate)
                                    {
                                        CString TempStr;
                                        TempStr.Format(_T("2nd NG %d%%"), TempScore1);
                                        (*it)->SetViewName(TempStr);
                                    }
                                    else
                                    {
                                        (*it)->SetViewName(_T("2nd"));
                                    }
                                }
                                else
                                {
                                    (*it)->SetViewName(_T("2nd"));
                                }
                                break;
                            }
ReviewSystem/ReviewSystem/DlgAlignCamera.h
@@ -39,6 +39,7 @@
    void Reset();
    void SetDAC2P(IDialogAlignCamera2Parent* pDAC2P)            { m_pDAC2P = pDAC2P; }
    void SetAlignResult(int nResultCode, double dDX, double dDy, double dTheta);
    double d_MatchingRate;
    virtual void UpdateProcessStatus(int nLineType, int nMachineType, int nProcessStatus, const CGlassResult* pGlassResult);
@@ -60,6 +61,7 @@
    CakGroupCtrl m_ctrlGroupCtrlAlign;
    CakButtonColorCtrl m_ctrlGetTempleteImage;
    CakButtonColorCtrl m_ctrlButtonColorCtrl;
    BOOL m_bAlignResultUpdate;
    IDialogAlignCamera2Parent*    m_pDAC2P;
ReviewSystem/ReviewSystem/MainFrm.cpp
@@ -626,8 +626,6 @@
        return;
    }
    g_pLog->DisplayMessage(_T("Program exit by User!"));
    DeinitReviewInterface();
    __super::OnClose();
ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -375,6 +375,8 @@
        m_pView->DeleteDialogs();
    }
    g_pLog->DisplayMessage(_T("Program exit by User!"));
    ClearAllObserverVector();
    g_pLog->DisplayMessage(_T("Clear all Observer Vectors"));
    ::Sleep(400);
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -3649,6 +3649,10 @@
    {
        strPath.Format(_T("%s\\%s"), pNetworkInfo->m_strAlignImagePath, strGlassID);
        pAlignCameraControl->SetSaveImageBasePath(strPath);
        strPath.Format(_T("D:\\ResultData\\AlignOK\\%s"), strGlassID);
        pAlignCameraControl->SetSaveImageOKPath(strPath);
        strPath.Format(_T("D:\\ResultData\\AlignNG\\%s"), strGlassID);
        pAlignCameraControl->SetSaveImageNGPath(strPath);
    }
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Make Align image path End "));
}