SDC C-Project CF Review 프로그램
LYW
2021-07-08 9cbd9e554f9956b3b945b51602f1d4a3fa0353e1
ReviewHistory/ReveiwHistory/DitGlassRawStruct.h
»õ ÆÄÀÏ
@@ -0,0 +1,745 @@
#pragma once
#define SHAREDMEMNAME_BASICINFO _T("DIT.GLASSRAWSYSTEM.SHAREDMEM.BASICINFO")
#define SHAREDMEMNAME_GLASSDATA   _T("DIT.GLASRAWSYSTEM.SHAREDMEM.GLASSDATA")
#define MUTEX_RAWMESSENGER      _T("MUTEX_RAWMESSENGER_IPC")
#define COMMAND_MAXCOUNT 8
#define RAWMESSENGER_MAXCAMNUM 30
#define RAWMESSENGER_MAXSCANNUM 20
#define MAX_ZONE_NUM 16
namespace ditRaw
{
   enum ReviewPlanType
   {
      RPT_Review = 0,
      RPT_User,
      RTP_WSI,
      RTP_PlanMeasure,
      RTP_Reflow,
      RTP_WsiReflow,
      RTP_UserWsi,
      RPT_AOICustom = 1000,
   };
};
enum emAOIProcStep
{
   APS_None = 0,
   //AOI
   APS_GlassLoading,
   APS_InspectEnd,
   //Review
   APS_CustomReviewRead,
   APS_ReviewStart,
   APS_ReviewEnd,
   RPS_StepNum
};
struct _grmGlassData
{
   void clear()
   {
      memset(this, 0, sizeof(_grmGlassData));
   }
   //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];
   char m_strEPPID[32];
   char m_strLotID[32];            //LOT_ID
   char m_strSLotID[32];            //SLOT_ID
   char m_strRecipeName[32];         //RECIPE_NAME
   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];
   unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM];
   unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM];
   //����� ï¿½ï¿½ï¿½ï¿½ 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
   char m_strPreProcessID[16];         //10.PRE_PROCESS_ID
   char m_strPreEQPID[16];            //11.PRE_EQP_ID
   char m_strPreChamerID[16];         //12.PRE_CHAMBER_ID
   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];
   char m_strPairHPanelID[13];
   char m_strGlassThickNess[2];
   char m_strCompCount[2];
   char m_strGlassState[2];
   char m_strInsFlag[2];
   char m_strPanelPosition[2];
   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;
   //210203 CJH - CutOff ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½
   int m_nCutOffDefectNum;
   //210323 CJH - Server/Frame Shrink ï¿½ï¿½ï¿½ï¿½ ï¿½ß°ï¿½
   char m_strShrinked[6];
   //210326 CJH - RAW ï¿½Ô·ï¿½ Defect ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ë¿©ï¿½ï¿½
   BOOL m_bRawCutoff;
};
struct _grmBlockData
{
   void clear()
   {
      memset(this, 0, sizeof(_grmBlockData));
   }
   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 m_nGlassIdDCR;               //22. GLASS_ID_DCR
};
struct _grmCellData
{
   void clear()
   {
      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         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;
   //Mura Data nwh 0404
   char      m_strProImage[32];
   char      m_strAvgGray_0[12];
   char      m_strPortion_0[12];
   //kyh Mura Data ï¿½ß°ï¿½ 0622
   char      m_strCorner_Gray_0[12];
   char      m_strAvgAmp_0[12];
   char      m_strFFTVar_0[12];
   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
   char      m_strCorner_Gray_1[12];
   char      m_strAvgAmp_1[12];
   char      m_strFFTVar_1[12];
   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
   char      m_strCorner_Gray_2[12];
   char      m_strAvgAmp_2[12];
   char      m_strFFTVar_2[12];
   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
   char      m_strCorner_Gray_3[12];
   char      m_strAvgAmp_3[12];
   char      m_strFFTVar_3[12];
   char      m_strFFTVah_3[12];
   char      m_strFFTVaq_3[12];
   char      m_strFFTPK_3[12];
   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_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;
};
struct _grmDefectReviewData
{
   void clear()
   {
      memset(this, 0, sizeof(_grmDefectReviewData));
   }
   //////////////////////////////////////////////////////////////////////////
   //���⼭ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2019/1/19]
   ditRaw::ReviewPlanType         m_nPlanType   ;
   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;
};
struct _grmDefectData
{
   void clear()
   {
      memset(this, 0, sizeof(_grmDefectData));
   }
   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
   short         m_nLevelSrcMax;            // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ Max   -----------------------------SX
   short         m_nLevelSrcAvg;            // ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ Avg   -----------------------------SA
   short         m_nLevelRefMin;            // ï¿½ñ±³´ï¿½ï¿½ ï¿½ï¿½ï¿½ Min   -------------------------RN
   short         m_nLevelRefMax;            // ï¿½ñ±³´ï¿½ï¿½ ï¿½ï¿½ï¿½ Max   -------------------------RX
   short         m_nLevelRefAvg;            // ï¿½ñ±³´ï¿½ï¿½ ï¿½ï¿½ï¿½ Avg   -------------------------RA
   short         m_nLevelDiffMin;         // ï¿½ï¿½ï¿½ï¿½ Min   ---------------------------------DN
   short         m_nLevelDiffMax;         // ï¿½ï¿½ï¿½ï¿½ Max   ---------------------------------DX
   short         m_nLevelDiffAvg;         // ï¿½ï¿½ï¿½ï¿½ Avg   ---------------------------------DA
   int            m_nDefectRScale;         // ï¿½È¼ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½   -------------------------RS
   short         m_sThreshold;            // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Threshold
   short         m_sThresholdAvg;         // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Threshold AVG
   short         m_sDefectPeak;            // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ Peak.
   short         m_sDefectLevel;            // (DiffAvg - Th) BOE 8G ï¿½ï¿½Ã»ï¿½ï¿½ï¿½ï¿½
   int            m_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         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ó��
   BOOL         m_bShrinked;            //210323 CJH - Frame Shrink ï¿½ï¿½ï¿½ï¿½ ï¿½ß°ï¿½
   char         m_strAoiImagePath[255];
   char         m_strReviewImagePath[255];
   int            m_nAlignRectLeft;
   int            m_nAlignRectTop;
   int            m_nAlignRectBottom;
   int            m_nAlignRectRight;
   //���� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2019/1/19]
   _grmDefectReviewData m_ReviewDefect;
};
enum emGlassRawCommand
{
   grcNone = 0,
   //AOI Sequence
   grcSequenceGlassLoading = 1,
   grcSequenceInspectEnd = 2,
   //Review Sequence
   grcSequenceReviewStart = 3,
   grcSequenceReviewEnd = 4,
   grcSequenceCustomReviewDataRead = 10,
   grcWriteRaw = 101,
   grcReadRaw = 102,
   grcWriteBin = 201,
   grcReadBin = 202,
   grcReviewWriteBIn = 301,
   grcGlassRawCommand
};
struct _grmDitCommand
{
   struct _grmCommand
   {
      int nCommand;
      char strParam[256];
      short nResult;
   };
   short m_nCommandIdxWrite;
   short m_nCommandIdxRead;
   _grmCommand m_nCommandBuffer[COMMAND_MAXCOUNT];
};
struct _grmDitMemInfo
{
   //���� ï¿½Þ¸ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ [������ 2018/11/12]
   size_t m_nGlassRawDataSize;
   int m_nGlassMaxDataNum;
   int m_nBlockMaxDataNum;
   int m_nCellMaxDataNum;
   int m_nDefectMaxDataNum;
   int m_nStackMaxDataNum;
   //Char ï¿½ï¿½ï¿½ï¿½ ï¿½Ú·á°¡ ï¿½Ö´ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½Ä¡ [������ 2018/11/12]
   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;
};
struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand
{
   size_t m_nGlassLoadingCount;
   emAOIProcStep m_ClientProcStep; //AOI, Review�� ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½
   emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)�� Ã³ï¿½ï¿½ ï¿½Ï·ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½
};
class CgrmGlassRawData
{
public:
   CgrmGlassRawData()
   {
      m_pGlassRawData = NULL;
      m_bRefAlloc = FALSE;
   };
   ~CgrmGlassRawData()
   {
      clear();
   };
   void clear()
   {
      if(m_bRefAlloc) { m_pGlassRawData = NULL; return;}
      if(m_pGlassRawData)
      {
         delete [] m_pGlassRawData;
         m_pGlassRawData = NULL;
      }
   };
   BOOL ImportGlassRaw(_grmDitMemInfo* pInfo, char* pData, bool bRefAlloc = false)
   {
      if(pInfo == NULL) return FALSE;
      if(m_pGlassRawData && pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) clear();
      if(m_pGlassRawData == NULL) m_pGlassRawData = new char[ pInfo->m_nGlassRawDataSize ];
      m_MemInfo = *pInfo;
      m_nGlassRawDataSize = pInfo->m_nGlassRawDataSize;
      m_nGlassMaxDataNum  = pInfo->m_nGlassMaxDataNum ;
      m_nBlockMaxDataNum   = pInfo->m_nBlockMaxDataNum   ;
      m_nCellMaxDataNum   = pInfo->m_nCellMaxDataNum  ;
      m_nDefectMaxDataNum = pInfo->m_nDefectMaxDataNum;
      m_nStackMaxDataNum   = pInfo->m_nStackMaxDataNum   ;
      m_nGlassDataPoint   = pInfo->m_nGlassDataPoint  ;
      m_nBlockDataPoint   = pInfo->m_nBlockDataPoint   ;
      m_nCellDataPoint    = pInfo->m_nCellDataPoint   ;
      m_nDefectDataPoint  = pInfo->m_nDefectDataPoint ;
      m_nStackDataPoint   = pInfo->m_nStackDataPoint   ;
      m_nSizeOfGlassData  = pInfo->m_nSizeOfGlassData ;
      m_nSizeOfBlockData   = pInfo->m_nBlockDataPoint   ;
      m_nSizeOfCellData   = pInfo->m_nSizeOfCellData  ;
      m_nSizeOfDefectData = pInfo->m_nSizeOfDefectData;
      m_nSizeOfStackData  = pInfo->m_nSizeOfStackData   ;
      if(bRefAlloc)
      {
         m_pGlassRawData = pData;
      }
      else
      {
         if(pData)
         {
            memcpy(m_pGlassRawData, pData, sizeof(char)*pInfo->m_nGlassRawDataSize);
         }
         else
         {
            memset(m_pGlassRawData, 0, sizeof(char)*pInfo->m_nGlassRawDataSize );
         }
      }
      m_pGlassData  = (_grmGlassData*)&m_pGlassRawData[pInfo->m_nGlassDataPoint];
      m_pBlockData      = (_grmBlockData*)&m_pGlassRawData[pInfo->m_nBlockDataPoint];
      m_pCellData   = (_grmCellData*)&m_pGlassRawData[pInfo->m_nCellDataPoint];
      m_pDefectData = (_grmDefectData*)&m_pGlassRawData[pInfo->m_nDefectDataPoint];
      m_pStackData = (_grmDefectData*)&m_pGlassRawData[pInfo->m_nStackDataPoint];
      m_bRefAlloc = bRefAlloc;
      return TRUE;
   };
   BOOL ExportGlassRaw(_grmDitMemInfo* pInfo, char* pData)
   {
      if(pInfo == NULL || pData == NULL) return FALSE;
      if(1) //new type //�޸� ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ Å©ï¿½â¿¡ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
      {
         //if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE;
         if(pInfo->m_nSizeOfGlassData  !=  m_MemInfo.m_nSizeOfGlassData)  return FALSE;
         if(pInfo->m_nSizeOfBlockData  !=  m_MemInfo.m_nSizeOfBlockData)  return FALSE;
         if(pInfo->m_nSizeOfCellData   !=  m_MemInfo.m_nSizeOfCellData)   return FALSE;
         if(pInfo->m_nSizeOfDefectData !=  m_MemInfo.m_nSizeOfDefectData) return FALSE;
         if(pInfo->m_nSizeOfStackData  !=  m_MemInfo.m_nSizeOfStackData)    return FALSE;
         if(pInfo->m_nCellMaxDataNum < m_pGlassData->m_nCellNum) return FALSE;
         if(pInfo->m_nDefectMaxDataNum < m_pGlassData->m_nDefectNum) return FALSE;
         if(pInfo->m_nStackMaxDataNum < m_pGlassData->m_nDefectNum) return FALSE;
         memcpy(&pData[pInfo->m_nGlassDataPoint], m_pGlassData,    pInfo->m_nSizeOfGlassData* 1);
         memcpy(&pData[pInfo->m_nBlockDataPoint], m_pBlockData,    pInfo->m_nSizeOfBlockData* 1);
         memcpy(&pData[pInfo->m_nCellDataPoint], m_pCellData,    pInfo->m_nSizeOfCellData*m_pGlassData->m_nCellNum);
         memcpy(&pData[pInfo->m_nDefectDataPoint], m_pDefectData, pInfo->m_nSizeOfDefectData*m_pGlassData->m_nDefectNum);
         memcpy(&pData[pInfo->m_nStackDataPoint], m_pStackData, pInfo->m_nSizeOfStackData*m_pGlassData->m_nDefectNum);
      }
      else //if() //type old
      {
         if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE;
         if(pInfo->m_nSizeOfGlassData  !=  m_MemInfo.m_nSizeOfGlassData)  return FALSE;
         if(pInfo->m_nSizeOfBlockData  !=  m_MemInfo.m_nSizeOfBlockData)  return FALSE;
         if(pInfo->m_nSizeOfCellData   !=  m_MemInfo.m_nSizeOfCellData)   return FALSE;
         if(pInfo->m_nSizeOfDefectData !=  m_MemInfo.m_nSizeOfDefectData) return FALSE;
         memcpy(pData, m_pGlassRawData, sizeof(char)*pInfo->m_nGlassRawDataSize);
      }
      return TRUE;
   };
   _grmGlassData*   GetGlassData(){return m_pGlassData;};
   _grmBlockData*   GetBlockData(int nIndex){return &m_pBlockData[nIndex];};
   _grmCellData*   GetCellData(int nIndex){return &m_pCellData[nIndex];};
   _grmDefectData*   GetDefectData(int nIndex){return &m_pDefectData[nIndex];};
   _grmDitMemInfo* GetMemInfo(){return &m_MemInfo;};
   _grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex]; };
protected:
   _grmDitMemInfo  m_MemInfo;
   char* m_pGlassRawData;
   _grmGlassData*  m_pGlassData;
   _grmBlockData*   m_pBlockData;
   _grmCellData*   m_pCellData;
   _grmDefectData* m_pDefectData;
   _grmDefectData*   m_pStackData;
   size_t m_nGlassRawDataSize;
   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;
private:
   bool m_bRefAlloc;
};