From e147f44d605bdce9c395c1fd66a88f6cc8106350 Mon Sep 17 00:00:00 2001 From: LYW <leeyeanwoo@diteam.co.kr> Date: 수, 30 3월 2022 16:21:38 +0900 Subject: [PATCH] no message --- ReviewHistory/ReveiwHistory/DitGlassRawStruct.h | 556 ++++++++++++++++++++++++------------------ ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp | 46 ++ .gitignore | 4 ReviewSystem/ReviewSystem/DisplayMessage.cpp | 8 ReviewSystem/ReviewSystem/ReviewInterface.cpp | 2 ReviewSystem/ReviewSystem/CameraImageView.cpp | 7 ReviewSystem/ReviewSystem/DlgAlignCamera.h | 2 ReviewSystem/ReviewSystem/CameraImageView.h | 2 ReviewSystem/ReviewSystem/MainFrm.cpp | 2 ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp | 4 ReviewSystem/ReviewSystem/CameraControlAlign.h | 4 ReviewSystem/ReviewSystem/CameraViewAlign.cpp | 23 + ReviewSystem/ReviewSystem/CameraControlAlign.cpp | 39 +++ ReviewHistory/bin/ReviewHistroy.exe | 0 ReviewSystem/ReviewSystem/DlgAlignCamera.cpp | 69 +++++ 15 files changed, 501 insertions(+), 267 deletions(-) diff --git a/.gitignore b/.gitignore index 3c46078..6b39cfe 100644 --- a/.gitignore +++ b/.gitignore @@ -43,7 +43,6 @@ *.manifest *_manifest.rc *.lastbuildstate -*.def *.pch *.pdb *.idb @@ -51,4 +50,5 @@ *.res *.cache *.unsuccessfulbuild -*.htm \ No newline at end of file +*.htm +*.def \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h b/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h index e5f7a55..a269abd 100644 --- a/ReviewHistory/ReveiwHistory/DitGlassRawStruct.h +++ b/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; }; \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp index 3c34066..955dff9 100644 --- a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp +++ b/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); } } diff --git a/ReviewHistory/bin/ReviewHistroy.exe b/ReviewHistory/bin/ReviewHistroy.exe index 0880ee3..16d97ba 100644 --- a/ReviewHistory/bin/ReviewHistroy.exe +++ b/ReviewHistory/bin/ReviewHistroy.exe Binary files differ diff --git a/ReviewSystem/ReviewSystem/CameraControlAlign.cpp b/ReviewSystem/ReviewSystem/CameraControlAlign.cpp index 9196ac2..8e2f5d0 100644 --- a/ReviewSystem/ReviewSystem/CameraControlAlign.cpp +++ b/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)); diff --git a/ReviewSystem/ReviewSystem/CameraControlAlign.h b/ReviewSystem/ReviewSystem/CameraControlAlign.h index eacb9cd..a3a4324 100644 --- a/ReviewSystem/ReviewSystem/CameraControlAlign.h +++ b/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; diff --git a/ReviewSystem/ReviewSystem/CameraImageView.cpp b/ReviewSystem/ReviewSystem/CameraImageView.cpp index 2f72f7f..edbb66d 100644 --- a/ReviewSystem/ReviewSystem/CameraImageView.cpp +++ b/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); diff --git a/ReviewSystem/ReviewSystem/CameraImageView.h b/ReviewSystem/ReviewSystem/CameraImageView.h index dfcea76..03352d2 100644 --- a/ReviewSystem/ReviewSystem/CameraImageView.h +++ b/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; } diff --git a/ReviewSystem/ReviewSystem/CameraViewAlign.cpp b/ReviewSystem/ReviewSystem/CameraViewAlign.cpp index 5573053..2e8d575 100644 --- a/ReviewSystem/ReviewSystem/CameraViewAlign.cpp +++ b/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); diff --git a/ReviewSystem/ReviewSystem/DisplayMessage.cpp b/ReviewSystem/ReviewSystem/DisplayMessage.cpp index ccacf49..f8e08c6 100644 --- a/ReviewSystem/ReviewSystem/DisplayMessage.cpp +++ b/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; diff --git a/ReviewSystem/ReviewSystem/DlgAlignCamera.cpp b/ReviewSystem/ReviewSystem/DlgAlignCamera.cpp index e659eee..ee55f10 100644 --- a/ReviewSystem/ReviewSystem/DlgAlignCamera.cpp +++ b/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; } diff --git a/ReviewSystem/ReviewSystem/DlgAlignCamera.h b/ReviewSystem/ReviewSystem/DlgAlignCamera.h index bbb525c..49e2718 100644 --- a/ReviewSystem/ReviewSystem/DlgAlignCamera.h +++ b/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; diff --git a/ReviewSystem/ReviewSystem/MainFrm.cpp b/ReviewSystem/ReviewSystem/MainFrm.cpp index 6a51bdc..ef54a5d 100644 --- a/ReviewSystem/ReviewSystem/MainFrm.cpp +++ b/ReviewSystem/ReviewSystem/MainFrm.cpp @@ -626,8 +626,6 @@ return; } - g_pLog->DisplayMessage(_T("Program exit by User!")); - DeinitReviewInterface(); __super::OnClose(); diff --git a/ReviewSystem/ReviewSystem/ReviewInterface.cpp b/ReviewSystem/ReviewSystem/ReviewInterface.cpp index 9d3b085..54bac9e 100644 --- a/ReviewSystem/ReviewSystem/ReviewInterface.cpp +++ b/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); diff --git a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp b/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp index 4b3b22e..de293e5 100644 --- a/ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp +++ b/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 ")); } -- Gitblit v1.9.3