SDC C-Project CF Review 프로그램
21개 파일 삭제됨
28개 파일 변경됨
987 ■■■■ 파일 변경됨
.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/CHDefectPicker/Debug/defectpicker.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/CHDefectPicker/Debug/defectpicker_range.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/CHReviewPrioritySorter/Debug/prioritysorter_cpjt.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/CHReviewPrioritySorter/PrioritySorter_CPJT.cpp 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/CHReviewResultParser/ParsingGlassResult_CPJT.cpp 37 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewRecipeEditor/DlgReview.cpp 3 ●●●●● 패치 | 보기 | 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/Debug/cameracontrolalign.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/cameracontroller.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/defectmap.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/dlgcontrol.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/dlgdefectfilter.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/dlgdefecthistorymap.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/dlgdefectinfo.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/dlgdefectlist.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/dlgdeffecthistroy.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/dlglogo.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/dlglongrun.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/dlgreviewhistorytool.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/mainfrm.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/reviewinterface.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/reviewsystem.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/reviewsystemview.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/sequenceprocessor.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/Debug/sequenceprocessor_cpjt.obj.enc 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DefectMap.cpp 88 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DefectMap.h 9 ●●●●● 패치 | 보기 | 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/DlgDefectFilter.cpp 14 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.cpp 29 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.h 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/MainFrm.cpp 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ModuleStatus.h 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.cpp 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.h 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/CHReviewRecipe/RcpPriorityInfo.h 2 ●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/CHReviewResult/DefectResult.h 2 ●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/CHReviewResultParser/ParsingGlassResult_CPJT.h 2 ●●● 패치 | 보기 | 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/CHDefectPicker/Debug/defectpicker.obj.enc
Binary files differ
ReviewSystem/CHDefectPicker/Debug/defectpicker_range.obj.enc
Binary files differ
ReviewSystem/CHReviewPrioritySorter/Debug/prioritysorter_cpjt.obj.enc
Binary files differ
ReviewSystem/CHReviewPrioritySorter/PrioritySorter_CPJT.cpp
@@ -662,34 +662,38 @@
        {
            if (pDefectResult->nJudgeType != 4) { return FALSE; }
        }
        else if (pPriorityInfo->GetPriorityGradeData() == RCP_PRIORITY_Judge_PT)
        else if (pPriorityInfo->GetPriorityGradeData() == RCP_PRIORITY_Judge_ND)
        {
            if (pDefectResult->nJudgeType != 5) { return FALSE; }
        }
        else if (pPriorityInfo->GetPriorityGradeData() == RCP_PRIORITY_Judge_Review)
        else if (pPriorityInfo->GetPriorityGradeData() == RCP_PRIORITY_Judge_PT)
        {
            if (pDefectResult->nJudgeType != 6) { return FALSE; }
        }
        else if (pPriorityInfo->GetPriorityGradeData() == RCP_PRIORITY_Judge_RC)
        else if (pPriorityInfo->GetPriorityGradeData() == RCP_PRIORITY_Judge_Review)
        {
            if (pDefectResult->nJudgeType != 7) { return FALSE; }
        }
        else if (pPriorityInfo->GetPriorityGradeData() == RCP_PRIORITY_Judge_Size)
        else if (pPriorityInfo->GetPriorityGradeData() == RCP_PRIORITY_Judge_RC)
        {
            if (pDefectResult->nJudgeType != 8) { return FALSE; }
        }
        else if (pPriorityInfo->GetPriorityGradeData() == RCP_PRIORITY_Judge_VI)
        else if (pPriorityInfo->GetPriorityGradeData() == RCP_PRIORITY_Judge_Size)
        {
            if (pDefectResult->nJudgeType != 9) { return FALSE; }
        }
        else if (pPriorityInfo->GetPriorityGradeData() == RCP_PRIORITY_Judge_Rework)
        else if (pPriorityInfo->GetPriorityGradeData() == RCP_PRIORITY_Judge_VI)
        {
            if (pDefectResult->nJudgeType != 10) { return FALSE; }
        }
        else if (pPriorityInfo->GetPriorityGradeData() == RCP_PRIORITY_Judge_Unknown)
        else if (pPriorityInfo->GetPriorityGradeData() == RCP_PRIORITY_Judge_Rework)
        {
            if (pDefectResult->nJudgeType != 11) { return FALSE; }
        }
        else if (pPriorityInfo->GetPriorityGradeData() == RCP_PRIORITY_Judge_Unknown)
        {
            if (pDefectResult->nJudgeType != 12) { return FALSE; }
        }
        
    }
    //RCP_PRIORITY_ORDER_ALL,RCP_PRIORITY_ORDER_NONE_STACK,RCP_PRIORITY_ORDER_STACK
ReviewSystem/CHReviewResultParser/ParsingGlassResult_CPJT.cpp
@@ -1145,6 +1145,8 @@
            break;
        case Judge_PR:            sStr.Format("PR");
            break;
        case Judge_ND:            sStr.Format("ND");
            break;
        case Judge_PT:            sStr.Format("PT");
            break;
        case Judge_Review:        sStr.Format("RV");
@@ -1414,7 +1416,10 @@
        //g_pLog->DisplayMessage(_T("AOIImageName : \n"), pSharedDefect->m_strAoiImageName);
        
        pDefectResult->strInspectImgFileName = pSharedDefect->m_strAoiImageName;
        pDefectResult->nDefectWBType        =    int(pSharedDefect->m_DefectBDType);
        /*< LYW 20211220 - #0000 ADD Start >*/
        //버그 수정
        pDefectResult->nDefectWBType        =    int(pSharedDefect->m_DefectType);
        /*< LYW 20211220 - #0000 ADD End >*/
        
        if(pDefectResult->nDefectWBType == 1 || pDefectResult->nDefectWBType == 3 || pDefectResult->nDefectWBType ==5)    pDefectResult->nDefectWBType =2;
        else    pDefectResult->nDefectWBType = 1;
@@ -1453,14 +1458,15 @@
        //��Ƽ �𵨺� Review/WSI ���͸��� ���� ����
        pDefectResult->nMultiModel          = pSharedDefect->m_nModelIdx;
        if (pSharedDefect->m_DefectBDType == 1)
        /*< LYW 20211220 - #$0000 MOD Start >*/
        if (pDefectResult->nDefectWBType == 1)
        {
            //Dark
            pDefectResult->nOpticType = 2;
            pDefectResult->nGrayType = 1;
            pDefectResult->strOpticType = _T("DARK");
        }
        else if (pSharedDefect->m_DefectBDType == 0)
        else if (pDefectResult->nDefectWBType == 2)
        {
            //White
            pDefectResult->nOpticType = 1;
@@ -1474,6 +1480,29 @@
            pDefectResult->nGrayType = 1;
            pDefectResult->strOpticType = _T("BOTH");
        }
        /*< LYW 20211220 - #0000 MOD End >*/
        /*< Origin Code >*/
//         if (pSharedDefect->m_DefectBDType == 1)
//         {
//             //Dark
//             pDefectResult->nOpticType = 2;
//             pDefectResult->nGrayType = 1;
//             pDefectResult->strOpticType = _T("DARK");
//         }
//         else if (pSharedDefect->m_DefectBDType == 0)
//         {
//             //White
//             pDefectResult->nOpticType = 1;
//             pDefectResult->nGrayType = 2;
//             pDefectResult->strOpticType = _T("WHITE");
//         }
//         else
//         {
//             //both
//             pDefectResult->nOpticType = 3;
//             pDefectResult->nGrayType = 1;
//             pDefectResult->strOpticType = _T("BOTH");
//         }
    
@@ -1548,7 +1577,7 @@
        CString strCellID(pDitRawClient->GetCellData(pSharedDefect->m_nCellIdx)->m_strCellName);
        pDefectResult->strCellID = strCellID;
        pDefectResult->nGrayType    = 1;    // Imsi
        //pDefectResult->nGrayType    = 1;    // Imsi
        pDefectResult->nOpticType    = 1;            
        pDefectResult->nTotalDefectCount    = nTotalDefectIdx;
        pDefectResult->ProcessID    = pDitRawClient->GetGlassData()->m_strOperID;
ReviewSystem/ReviewRecipeEditor/DlgReview.cpp
@@ -1488,6 +1488,9 @@
                case RCP_PRIORITY_Judge_PR:
                    strTemp.Format(_T("PR"));
                    break;
                case RCP_PRIORITY_Judge_ND:
                    strTemp.Format(_T("ND"));
                    break;
                case RCP_PRIORITY_Judge_PT:
                    strTemp.Format(_T("PT"));
                    break;
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/Debug/cameracontrolalign.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/cameracontroller.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/defectmap.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/dlgcontrol.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/dlgdefectfilter.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/dlgdefecthistorymap.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/dlgdefectinfo.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/dlgdefectlist.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/dlgdeffecthistroy.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/dlglogo.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/dlglongrun.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/dlgreviewhistorytool.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/mainfrm.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/reviewinterface.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/reviewsystem.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/reviewsystemview.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/sequenceprocessor.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/Debug/sequenceprocessor_cpjt.obj.enc
Binary files differ
ReviewSystem/ReviewSystem/DefectMap.cpp
@@ -77,11 +77,14 @@
    m_RowColor[2]        = RGB(220,20,220);
    m_RowColor[3]        = RGB(20,220,220);
    m_RowColor[4]       = RGB(220, 20, 80);
    for (int i=0; i<5; i++)
    m_RowColor[5]        = RGB(255, 128, 0);
    for (int i=0; i<6; i++)
    {
        m_pDefectPen[i].CreatePen(PS_SOLID, 1, m_RowColor[i]); 
        m_pDefectBrush[i].CreateSolidBrush(m_RowColor[i]); 
    }
//     m_pOffsetPen.CreatePen(PS_SOLID, 1, RGB(100, 200, 80));
//     m_pOffsetBrush.CreateSolidBrush(RGB(100, 200, 80));
    m_nPlanIndex        = 0;
    m_bHistoryEnable = TRUE;
@@ -491,6 +494,28 @@
     nCamSacnIndex = nScanidx;
     nGlassMax = nXpos;
     nGlassMin = nYpos;
}
void CDefectMap::SetOffsetparm(int nCamidx, int nScanidx, BOOL bUse)
{
    CDC *MemDC = GetDC();
    nOffSetMode = bUse;
    nCamIndex = nCamidx;
    nCamSacnIndex = nScanidx;
    if (bUse == TRUE)
    {
        DrawDefect(MemDC);
        DrawReviewDefect(MemDC);
        //DrawWsiDefect(&MemDC);
    }
    nOffSetMode = FALSE;
    nCamIndex = -1;
    nCamSacnIndex = -1;
    //Invalidate(TRUE);
}
void CDefectMap::OnPaint()
@@ -1585,7 +1610,7 @@
            return 3;
        }
        break;
        //변경 필요
    case DefectType_Judge:
        if (defectFilter.bJudgeOK && (pDefectResult->nJudgeType == DEFECT_JUDGE_CPJT_OK))
        {
@@ -1600,6 +1625,11 @@
        if (defectFilter.bJudgePR && (pDefectResult->nJudgeType == DEFECT_JUDGE_CPJT_PR))
        {
            return 2;
        }
        if (defectFilter.bJudgeND && (pDefectResult->nJudgeType == DEFECT_JUDGE_CPJT_ND))
        {
            return 3;
        }
        break;
@@ -1737,6 +1767,11 @@
        {
            return 2;
        }
        if (defectFilter.bJudgeND)
        {
            return 3;
        }
        break;
    case DefectType_Process:
@@ -1818,13 +1853,36 @@
            continue;
        }
        pOldPen = pDC->SelectObject(&m_pDefectPen[nColorIdx]);
        pDC->SelectStockObject(BLACK_PEN);
        pOldBrush = pDC->SelectObject(&m_pDefectBrush[nColorIdx]);
        if (nOffSetMode == TRUE)
        {
            if (pDefectResult->nAOICameraIdx == nCamIndex && pDefectResult->nAOIScanIdx == nCamSacnIndex)
            {
                pOldPen = pDC->SelectObject(&m_pDefectPen[5]);
                //pDC->SelectStockObject(BLACK_PEN);
                pOldBrush = pDC->SelectObject(&m_pDefectBrush[5]);
            }
            else
            {
                pOldPen = pDC->SelectObject(&m_pDefectPen[5]);
                pDC->SelectStockObject(BLACK_PEN);
                pOldBrush = pDC->SelectObject(&m_pDefectBrush[5]);
                pDC->SelectStockObject(BLACK_BRUSH);
            }
        }
        else
        {
            pOldPen = pDC->SelectObject(&m_pDefectPen[nColorIdx]);
            pDC->SelectStockObject(BLACK_PEN);
            pOldBrush = pDC->SelectObject(&m_pDefectBrush[nColorIdx]);
        }
        nPosX = pDefectResult->nUMOriginX;
        nPosY = pDefectResult->nUMOriginY;
        TransformGlass2Map(nPosX, nPosY);
        pDC->Rectangle(nPosX - m_nDefectSize, nPosY - m_nDefectSize, nPosX + m_nDefectSize, nPosY + m_nDefectSize);
    }
@@ -2226,7 +2284,25 @@
        for(constVectorSReviewResultIt its=pReviewResult->m_vecSReviewResult.begin(); its!=pReviewResult->m_vecSReviewResult.end();its++)
        {
            if(its->nResultCode > ReviewResult_Process_Fail)
            if (nOffSetMode == TRUE)
            {
                if (its->nAOICameraIdx == nCamIndex && its->nAOIScanIdx == nCamSacnIndex)
                {
                    pOldPen = pDC->SelectObject(&m_pDefectPen[5]);
                    //pDC->SelectStockObject(BLACK_PEN);
                    pOldBrush = pDC->SelectObject(&m_pDefectBrush[5]);
                    //pDC->SelectStockObject(BLACK_BRUSH);
                }
                else
                {
                    pOldPen = pDC->SelectObject(&m_pDefectPen[5]);
                    pDC->SelectStockObject(BLACK_PEN);
                    pOldBrush = pDC->SelectObject(&m_pDefectBrush[5]);
                    pDC->SelectStockObject(BLACK_BRUSH);
                }
            }
            else if(its->nResultCode > ReviewResult_Process_Fail)
            {
                pOldPen = pDC->SelectObject(&reviewedPen);
                pOldBrush = pDC->SelectObject(&reviewedBrush);
ReviewSystem/ReviewSystem/DefectMap.h
@@ -214,9 +214,11 @@
    const CGlassResult*            m_pGlassResult;
    const VectorReviewResult*    m_pVecReviewResult;
    
    COLORREF                    m_RowColor[5];
    CBrush                        m_pDefectBrush[5];
    CPen                        m_pDefectPen[5];
    COLORREF                    m_RowColor[6];
    CBrush                        m_pDefectBrush[6];
    CPen                        m_pDefectPen[6];
    //CPen                        m_pOffsetPen;
    //CBrush                        m_pOffsetBrush;
    CPoint                m_pMousePt;
    CPoint                m_pMouseDwPt;
@@ -244,6 +246,7 @@
public:
    void SetOffsetmodeparma(BOOL bMode, int nCamidx, int nScanidx, double nXpos, double nYpos);
    void SetOffsetparm(int nCamidx, int nScanidx, BOOL bUse);
        BOOL nOffSetMode;
        int nGlassMax;
        int nGlassMin;
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/DlgDefectFilter.cpp
@@ -450,7 +450,7 @@
        m_CheckValue[0] = m_sDefectFilter.bJudgeOK;
        m_CheckValue[1] = m_sDefectFilter.bJudgeTR;
        m_CheckValue[2] = m_sDefectFilter.bJudgePR;
        m_CheckValue[3] = 0;
        m_CheckValue[3] = m_sDefectFilter.bJudgeND;
        break;
    case DefectType_Process:
@@ -551,17 +551,17 @@
    // col 1
    int nRowIdx = 0;
    m_ctrlGridDefectFilter.SetItemText(nRowIdx,    1, _T("O"));
    m_ctrlGridDefectFilter.SetItemText(nRowIdx,    1, _T("OK"));
    m_ctrlGridDefectFilter.SetItemText(nRowIdx++,    2, _T("OK Defect"));
    m_ctrlGridDefectFilter.SetItemText(nRowIdx,    1, _T("R"));
    m_ctrlGridDefectFilter.SetItemText(nRowIdx,    1, _T("TR"));
    m_ctrlGridDefectFilter.SetItemText(nRowIdx++,    2, _T("TR Defect"));
    m_ctrlGridDefectFilter.SetItemText(nRowIdx,    1, _T("X"));
    m_ctrlGridDefectFilter.SetItemText(nRowIdx,    1, _T("PR"));
    m_ctrlGridDefectFilter.SetItemText(nRowIdx++,    2, _T("PR Defect"));
    m_ctrlGridDefectFilter.SetItemText(nRowIdx,    1, _T(""));
    m_ctrlGridDefectFilter.SetItemText(nRowIdx++,    2, _T(""));
    m_ctrlGridDefectFilter.SetItemText(nRowIdx,    1, _T("ND"));
    m_ctrlGridDefectFilter.SetItemText(nRowIdx++,    2, _T("ND Defect"));
}
void CDlgDefectFilter::FillGridDefectFilterStack()
@@ -647,6 +647,7 @@
    m_ctrlGridDefectFilter.SetItemText(nRowIdx++, 2, _T(""));
}
//변경 필요
void CDlgDefectFilter::FillGridDefectFilterGray()
{
    for (int i=0; i<4; i++)
@@ -770,6 +771,7 @@
        m_sDefectFilter.bJudgeOK = m_CheckValue[0];
        m_sDefectFilter.bJudgeTR = m_CheckValue[1];
        m_sDefectFilter.bJudgePR = m_CheckValue[2];
        m_sDefectFilter.bJudgeND = m_CheckValue[3];
        break;
    case DefectType_Process:
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.cpp
@@ -1186,3 +1186,32 @@
    Invalidate(FALSE);
}
/*< LYW 20211025 - #3684 ADD End >*/
BOOL DlgReviewOffSetTool::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
    // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
    if (m_ctrlGridReviewOffSetInfo.GetSafeHwnd() && wParam == (WPARAM)m_ctrlGridReviewOffSetInfo.GetDlgCtrlID())
    {
        //*pResult = 1;
        GV_DISPINFO *pDispInfo = (GV_DISPINFO*)lParam;
        if (NM_DBLCLK == pDispInfo->hdr.code)
        {
            //int nCol = pDispInfo->item.col;
            if (pDispInfo->item.row)
            {
                int nRow = (pDispInfo->item.row) - 1;
                int CamIdx = nRow / m_nScanCount;
                int scanIdx = nRow % m_nScanCount;
                if (m_pDDL2P)
                {
                    m_pDDL2P->IDRO2P_SetOffsetPram(CamIdx, scanIdx, TRUE);
                }
            }
        }
    }
    return CDialogEx::OnNotify(wParam, lParam, pResult);
}
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.h
@@ -34,6 +34,7 @@
    virtual BOOL IDRO2P_GetMotorPos(int nModule, double &dXpos, double &dYpos)= 0;
    virtual BOOL IDRO2P_SetGlassMode(BOOL bMode, int nCamidx, int nScanidx, double nXpos, double nYpos) = 0;
    virtual BOOL IDRO2P_SetOffsetPram(int nCamIdx, int nScanIdx, BOOL bUse = 0) = 0;
    //virtual const CSystemInfo*  SP2P_System_GetSystemInfo()= 0;
    //virtual const CMotorControlInfo*    ISP2P_System_GetMotorInfo() = 0;
};
@@ -192,4 +193,5 @@
    double m_dWarnStandard;
    double m_dHardStandard;
    /*< LYW 20211111 - #3766 ADD End >*/
    virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
};
ReviewSystem/ReviewSystem/MainFrm.cpp
@@ -626,8 +626,6 @@
        return;
    }
    g_pLog->DisplayMessage(_T("Program exit by User!"));
    DeinitReviewInterface();
    __super::OnClose();
ReviewSystem/ReviewSystem/ModuleStatus.h
@@ -54,6 +54,7 @@
        bJudgeOK        = TRUE;
        bJudgeTR        = TRUE;
        bJudgePR        = TRUE;
        bJudgeND        = TRUE;
        bProcessNormal    = TRUE;
        bProcessMask    = TRUE;
@@ -96,6 +97,9 @@
    BOOL bJudgeOK;
    BOOL bJudgeTR;
    BOOL bJudgePR;
    /*< LYW 20211220 - #0000 ADD Start >*/
    BOOL bJudgeND;
    /*< LYW 20211220 - #0000 ADD End >*/
    BOOL bProcessNormal;
    BOOL bProcessMask;
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);
@@ -3508,6 +3510,14 @@
    return FALSE;
}
BOOL CReviewInterface::IDRO2P_SetOffsetPram(int nCamIdx, int nScanIdx, BOOL bUse)
{
    CDlgDefectMap* pDefectmap = m_pView->GetDefectMapDlgHandle();
    if (pDefectmap == NULL) { return FALSE; }
    pDefectmap->GetDefectMap()->SetOffsetparm(nCamIdx, nScanIdx, bUse);
    return FALSE;
}
// diagnosis processor
void CReviewInterface::IDP2P_DisplayMessage(int nIndex, const TCHAR* lpstrFormat, ...)
{
ReviewSystem/ReviewSystem/ReviewInterface.h
@@ -295,6 +295,7 @@
    virtual BOOL GetOffSetValue(int nModule, int nCam, int nScan, double dGlassXPos, double &dXpos, double &dYpos);
    virtual BOOL IDRO2P_SetGlassMode(BOOL bMode, int nCamidx, int nScanidx, double nXpos, double nYpos);
    virtual BOOL IDRO2P_SetOffsetPram(int nCamIdx, int nScanIdx, BOOL bUse = 0);
protected: // Sequence Processor
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 "));
}
ReviewSystem/include/CHReviewRecipe/RcpPriorityInfo.h
@@ -21,7 +21,7 @@
enum RECIPE_PRIORITY_CSOT_STACK_TYPE        { RCP_PRIORITY_STACK_ALL = 0, RCP_PRIORITY_STACK_NONE_STACK, RCP_PRIORITY_STACK,RCP_PRIORITY_STACK_REVIEWED,RCP_PRIORITY_STACK_COUNT};
enum RECIPE_PRIORITY_CPJT_JUDGEMENT {
    RCP_PRIORITY_Judge_ALL = 0, RCP_PRIORITY_Judge_OK, RCP_PRIORITY_Judge_RP, RCP_PRIORITY_Judge_NG, RCP_PRIORITY_Judge_TR, RCP_PRIORITY_Judge_PR, RCP_PRIORITY_Judge_PT, RCP_PRIORITY_Judge_Review, RCP_PRIORITY_Judge_RC, RCP_PRIORITY_Judge_Size, RCP_PRIORITY_Judge_VI, RCP_PRIORITY_Judge_Rework, RCP_PRIORITY_Judge_Unknown, RCP_PRIORITY_GRADE_COUNT
    RCP_PRIORITY_Judge_ALL = 0, RCP_PRIORITY_Judge_OK, RCP_PRIORITY_Judge_RP, RCP_PRIORITY_Judge_NG, RCP_PRIORITY_Judge_TR, RCP_PRIORITY_Judge_PR, RCP_PRIORITY_Judge_ND, RCP_PRIORITY_Judge_PT, RCP_PRIORITY_Judge_Review, RCP_PRIORITY_Judge_RC, RCP_PRIORITY_Judge_Size, RCP_PRIORITY_Judge_VI, RCP_PRIORITY_Judge_Rework, RCP_PRIORITY_Judge_Unknown, RCP_PRIORITY_GRADE_COUNT
};
enum RECIPE_PRIORITY_CPJT_DEFECTCODE_TYPE {
ReviewSystem/include/CHReviewResult/DefectResult.h
@@ -17,7 +17,7 @@
    enum DefectSizeType            { DEFECT_SIZE_NONE = 0, DEFECT_SIZE_SMALL, DEFECT_SIZE_MEDIUM, DEFECT_SIZE_LARGE, DEFECT_SIZE_HUGE };
    enum DefectJudgeType        { DEFECT_JUDGE_NONE = 0, DEFECT_JUDGE_OK, DEFECT_JUDGE_TR, DEFECT_JUDGE_PR};
    enum DefectJudgeType_CPJT {
        DEFECT_JUDGE_CPJT_OK = 0, DEFECT_JUDGE_CPJT_RP, DEFECT_JUDGE_CPJT_NG, DEFECT_JUDGE_CPJT_TR, DEFECT_JUDGE_CPJT_PR, DEFECT_JUDGE_CPJT_PT, DEFECT_JUDGE_CPJT_Review, DEFECT_JUDGE_CPJT_RC, DEFECT_JUDGE_CPJT_Size, DEFECT_JUDGE_CPJT_VI, DEFECT_JUDGE_CPJT_Rework, DEFECT_JUDGE_CPJT_Unknown, DEFECT_JUDGE_CPJT_GRADE_COUNT
        DEFECT_JUDGE_CPJT_OK = 0, DEFECT_JUDGE_CPJT_RP, DEFECT_JUDGE_CPJT_NG, DEFECT_JUDGE_CPJT_TR, DEFECT_JUDGE_CPJT_PR, DEFECT_JUDGE_CPJT_ND, DEFECT_JUDGE_CPJT_PT, DEFECT_JUDGE_CPJT_Review, DEFECT_JUDGE_CPJT_RC, DEFECT_JUDGE_CPJT_Size, DEFECT_JUDGE_CPJT_VI, DEFECT_JUDGE_CPJT_Rework, DEFECT_JUDGE_CPJT_Unknown, DEFECT_JUDGE_CPJT_GRADE_COUNT
    };
    enum DefectSubType            { DEFECT_SUBTYPE_NONE = 0, DEFECT_SUBTYPE_NR, DEFECT_SUBTYPE_MD, DEFECT_SUBTYPE_CD, DEFECT_SUBTYPE_MC };
    enum DefectProcessType        { DEFECT_PROCESS_NONE = 0, DEFECT_PROCESS_NORMAL, DEFECT_PROCESS_MASK, DEFECT_PROCESS_COMMON, DEFECT_PROCESS_CRACK };
ReviewSystem/include/CHReviewResultParser/ParsingGlassResult_CPJT.h
@@ -6,7 +6,7 @@
enum GlassOriginDir     { GlassOrigin_LeftTop=0, GlassOrigin_RightTop, GlassOrigin_LeftBottom, GlassOrigin_RightBottom, GlassOrigin_Count };
enum CSOTDfectCode      {CSOT_PARTICLE=1,COST_CRACK,CSOT_MURA,CSOT_PROTRUDE,CSOT_DENT,CSOT_TFE_ABNORMAL,CSOT_BUBBLE,CSOT_SCRATCH};
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 };
enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_ND, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_Unknown };
enum JudgeCode { CODE_DEFAULT= 0,TRDF , BATR, DOBB, DOBS, DOWW, DOWB, DOWS };
#define LAYER_GT_50            _T("0114")