.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.exeBinary files differ
ReviewSystem/CHDefectPicker/Debug/defectpicker.obj.encBinary files differ
ReviewSystem/CHDefectPicker/Debug/defectpicker_range.obj.encBinary files differ
ReviewSystem/CHReviewPrioritySorter/Debug/prioritysorter_cpjt.obj.encBinary 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.encBinary files differ
ReviewSystem/ReviewSystem/Debug/cameracontroller.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/defectmap.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/dlgcontrol.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/dlgdefectfilter.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/dlgdefecthistorymap.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/dlgdefectinfo.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/dlgdefectlist.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/dlgdeffecthistroy.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/dlglogo.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/dlglongrun.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/dlgreviewhistorytool.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/mainfrm.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/reviewinterface.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/reviewsystem.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/reviewsystemview.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/sequenceprocessor.obj.encBinary files differ
ReviewSystem/ReviewSystem/Debug/sequenceprocessor_cpjt.obj.encBinary 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")