SDC C-Project CF Review 프로그램
LYW
2021-10-15 e5fa774d622d6852fe8e1f033045aed221649108
ReviewSystem/ReviewSystem/DitGlassRawStruct.h
@@ -8,6 +8,7 @@
#define RAWMESSENGER_MAXCAMNUM 30
#define RAWMESSENGER_MAXSCANNUM 20
#define RAWMESSENGER_MAXHLINUM 8
#define MAX_ZONE_NUM 16
@@ -30,7 +31,7 @@
   APS_None = 0,
   //AOI
   APS_GlassLoading,
   APS_GlassLoading,
   APS_InspectEnd,
   //Review
   APS_CustomReviewRead,
@@ -63,10 +64,10 @@
   //설비정보
   char m_strLine[32];
   char m_strEquipType[32];
   char m_strEquipID[32];
   char m_strStepID[32];
   char m_strOperID[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
@@ -76,8 +77,8 @@
   //기본 물류정보
   char m_strGlassID[32];            //Glass ID
   char m_strPPID[32];
   char m_strEPPID[32];
   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                        
@@ -129,9 +130,9 @@
   //카메라/스캔 정보 [김태현 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];
   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;
@@ -143,6 +144,9 @@
   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];
@@ -173,8 +177,8 @@
   char m_strCount2[2];
   //Mura Data 0412 nwh
   float m_fMaxAvgGray;
   float m_fMaxPortion;
   char m_strMaxAvgGray[12];
   char m_strMaxPortion[12];
     //1226NWH
@@ -191,6 +195,8 @@
   int m_nStackNum;
   BOOL m_bStackRead;
   int m_nRawMergeNum;
   BOOL m_bRawMergeRead;
   //210203 CJH - CutOff 대상 결함 수
   int m_nCutOffDefectNum;
   //210323 CJH - Server/Frame Shrink 정보 추가
@@ -217,7 +223,7 @@
   {
      memset(this, 0, sizeof(_grmCellData));
   }
   int getTotalDefectNum() { return m_nDefectNumTypeTB + m_nDefectNumTypeTW + m_nDefectNumTypeRB + m_nDefectNumTypeRW; };
   int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; };
   int                  m_nCellID;                     //1. PANEL_ID
   short               m_nModelIdx;            // 몇 번째 모델인가?
@@ -254,11 +260,45 @@
   //Mura Data nwh 0404 
   char      m_strProImage[32];
   float      m_fAvgGray;
   float      m_fPortion;
   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;
@@ -295,7 +335,7 @@
   //////////////////////////////////////////////////////////////////////////
   //여기서 부터 리뷰 영역 [김태현 2019/1/19]
   ditRaw::ReviewPlanType         m_nPlanType;
   ditRaw::ReviewPlanType         m_nPlanType   ;
   int         m_nResultCode;  //0:None, 1:Success
   int         m_nShotIndex; //리뷰 찍은 순번 [김태현 2018/12/5]
   int         m_nModuleIndex;
@@ -303,6 +343,7 @@
   float      m_fManification;
   float      m_fManificResoultion;
   char      m_strRevImageName[256];
   char      m_strRevImagePath[256];
   //////////////////////////////////////////////////////////////////////////
   // Measure 영역
@@ -316,7 +357,7 @@
   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];
   char      m_strWsi_3DImageFilename[256];
   int         m_nWsiReflowPositionIndex;               // WsiReflowPositionIndex
   int         m_nWsi_pReflowResultData[8];
   double      m_dWsi_DamDistance;
@@ -329,7 +370,7 @@
   // 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];
   float      m_fReflow_LinePosData[8];
   int         m_nReflow_Side;
   int         m_nReflow_InspectionMode;
};
@@ -376,13 +417,14 @@
   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 입력
   //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
@@ -457,14 +499,21 @@
   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];
   //리뷰 디펙 정보 [김태현 2019/1/19]
   int            m_nAlignRectLeft;
   int            m_nAlignRectTop;
   int            m_nAlignRectBottom;
   int            m_nAlignRectRight;
   _grmDefectReviewData m_ReviewDefect;
};
@@ -488,6 +537,8 @@
   grcWriteBin = 201,
   grcReadBin = 202,
   grcReviewWriteBIn = 301,
   grcGlassRawCommand
};
@@ -498,11 +549,11 @@
   {
      int nCommand;
      char strParam[256];
      short nResult;
      short nResult;
   };
   short m_nCommandIdxWrite;
   short m_nCommandIdxRead;
   _grmCommand m_nCommandBuffer[COMMAND_MAXCOUNT];
   _grmCommand m_nCommandBuffer[COMMAND_MAXCOUNT];
};
struct _grmDitMemInfo
@@ -514,6 +565,7 @@
   int m_nCellMaxDataNum;
   int m_nDefectMaxDataNum;
   int m_nStackMaxDataNum;
   int m_nRawMergeMaxDataNum;
   //Char 기준 자료가 있는 시작 위치 [김태현 2018/11/12]
   int m_nGlassDataPoint;
@@ -521,12 +573,14 @@
   int m_nCellDataPoint;
   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;
};
struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand
{
@@ -551,64 +605,64 @@
   void clear()
   {
      if (m_bRefAlloc) { m_pGlassRawData = NULL; return; }
      if(m_bRefAlloc) { m_pGlassRawData = NULL; return;}
      if (m_pGlassRawData)
      if(m_pGlassRawData)
      {
         delete[] m_pGlassRawData;
         delete [] m_pGlassRawData;
         m_pGlassRawData = NULL;
      }
   };
   BOOL ImportGlassRaw(_grmDitMemInfo* pInfo, char* pData, bool bRefAlloc = false)
   {
      if (pInfo == NULL) return FALSE;
      if(pInfo == NULL) return FALSE;
      if (m_pGlassRawData && pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) clear();
      if(m_pGlassRawData && pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) clear();
      if (m_pGlassRawData == NULL) m_pGlassRawData = new char[pInfo->m_nGlassRawDataSize];
      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_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_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_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)
      if(bRefAlloc)
      {
         m_pGlassRawData = pData;
      }
      else
      {
         if (pData)
         if(pData)
         {
            memcpy(m_pGlassRawData, pData, sizeof(char)*pInfo->m_nGlassRawDataSize);
         }
         else
         {
            memset(m_pGlassRawData, 0, sizeof(char)*pInfo->m_nGlassRawDataSize);
            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_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];
@@ -617,36 +671,36 @@
   };
   BOOL ExportGlassRaw(_grmDitMemInfo* pInfo, char* pData)
   {
      if (pInfo == NULL || pData == NULL) return FALSE;
      if(pInfo == NULL || pData == NULL) return FALSE;
      if (1) //new type //메모리 총 공간 크기에 상관없이
      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_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_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_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_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_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);
      }
@@ -655,11 +709,11 @@
      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; };
   _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;