#pragma once #include #include #include #include using namespace std; #define WM_USER_SYSTEM_CLOSE (WM_USER + 1) #define UM_LIST_SELECTDEFECT (WM_USER + 2) #define WM_POCESS_STATUS (WM_USER + 3) #define WM_LIVE_IMG_UPDATE (WM_USER + 4) #define UM_UPDATE_RECIPE (WM_USER + 5) #define UM_SEND_MESSAGE_MAIN_DLG (WM_USER + 6) #define WM_BATCH_PROCESS_NEXT (WM_USER + 7) #define MAX_CAMERA_COUNT 4 #define MAX_SCAN_COUNT 2 #define MAX_DIMENSION_COUNT 8 #define MAX_STAGE_HAND_COUNT 2 #define MAX_FRAM_COUNT 1024 #define SHARD_MEMORY_STRING_FRAMEBUFFER _T("SHARD_MEMORY_FRAMEBUFFER") #define RECIPE_PATH _T("C:\\RCutProject\\Recipe") #define RECIPE_ALIGN_PATH _T("C:\\RCutProject\\Align") #define LINK_FILE_NAME _T("C:\\RCutProject\\Recipe\\PPIDLink.lst") #define GLASSTYPE_IMAGE_PATH _T("C:\\RcutProject\\Recipe\\GlassType") #define PATH_LOGIMAGE _T("D:\\Image\\Log\\") #define PATH_DEBUGFULLIMAGE _T("D:\\Image\\Log\\DebugFullImage\\") #define PATH_INSPECTOR _T("C:\\RCutProject") #define PATH_INSPECTION_DATA _T("D:\\InspectionData\\") #define RECIPE_HOLE_TEMPLATE_PATH _T("C:\\RCutProject\\HoleIns") #define CHKMAX(a,b) (((a) > (b)) ? (a) : (b)) #define CHKMIN(a,b) (((a) < (b)) ? (a) : (b)) #define MAX_PANEL_SIDE 4 // ¸é ¼ö #define UPDN_TYPE 2 // »óÇÏ °°ÀÌ Àִ°æ¿ì 2 Çϳª¸¸ Àִ°æ¿ì 1 #define MAX_VIEWINFO_GRD_CNT 7 #define MAX_PROFILE_SETTING_COUNT 79 #define PROFILE_INSPECT_SIZE_A_C 13 #define PROFILE_INSPECT_SIZE_B_D 10 #define PROFILE_RCUT_SIZE 5 #define PROFILE_INSPECT_INDEX_A 33 #define PROFILE_INSPECT_INDEX_B 0 #define PROFILE_INSPECT_INDEX_C 10 #define PROFILE_INSPECT_INDEX_D 23 #define PROFILE_INSPECT_INDEX_CF 46 #define PROFILE_RCUT_INSPECT_INDEX_A 59 #define PROFILE_RCUT_INSPECT_INDEX_B 64 #define PROFILE_RCUT_INSPECT_INDEX_C 69 #define PROFILE_RCUT_INSPECT_INDEX_D 74 #define SHORT_SIDE_INSPECTION_POINT_OFFSET 1420 #define LONG_SIDE_INSPECTION_POINT_OFFSET 4770 namespace GLOBAL_DEFINE { enum ENTRY_VIEW {EV_VIEW_INFO=0, EV_VIEW_DEFECT, EV_VIEW_IMAGE, EV_VIEW_RECIPE, EV_VIEW_LIVE, EV_VIEW_HW, EV_EXIT, EV_VIEW_End}; enum LIGHT_TYPE{LIGHT_TYPE_TRANS=0,LIGHT_TYPE_REF,LIGHT_TYPE_NONE}; enum LIGHT_MAKER{MAKER_LCP=0,MAKER_AKP,MAKER_NONE}; enum CAMERA_DIR{CAMDIR_TOP=0,CAMDIR_BOTTOM,CAMDIR_NONE}; enum CAMERA_INSPECTION_DIR{INSPECTDIR_FORWARD=0,INSPECTDIR_BACKWARD,INSPECTDIR_NONE}; enum CAMERA_SCANDIR {SCANGLASS_X=0,SCANGLASS_Y,SCANGLASS_NONE}; enum BOARD_TYPE{GRAB_LINK_BOARD=0,RADIENT_BOARD,SAP_BOARD,BOARDTYPE_NONE}; enum EmSplashCmd {emShow=0, emHide, emText}; enum ScanDirectionIns { SD_Forward = 0, SD_Backward, SD_Unknown }; // Glass ±âÁØ Scan ¹æÇâ. enum DimensionDir { DIMENSION_A=0, DIMENSION_B, DIMENSION_C, DIMENSION_D,DIMENSION_A_DN, DIMENSION_B_DN, DIMENSION_C_DN, DIMENSION_D_DN, DIMENSION_NONE}; enum EM_CHIPPING_COMP{CHIP_AND=0,CHIP_OR,CHIP_NONE}; enum EM_CORNER_JUDGE{A_ZONE_CRACK=0,B_ZONE_CRACK,B_ZONE_BURR,C_ZONE_CRACK,C_ZONE_BURR, D_ZONE_CRACK, EDGE_THINCRACK, CHIP_WHITE}; enum UPDATE_SETTING_RCP{EM_GLASSINFO_RCP=0,EM_CUTAREA_RCP,EM_DIMEN_RCP,EM_SPLINE_RCP,EM_CORNER_RCP,EM_NOTCH_RCP,EM_VCR_RCP}; enum GlassDirection { GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 }; enum ExpRegionType { ER_ALL=0, ER_AREA, ER_NONE};//130115 enum Procee_Mode {PROC_MODE_AUTO=0,PROC_MODE_SIMULATION_ONESIDE,PROC_MODE_SIMULATION_SIDESHORT,PROC_MODE_SIMULATION_SIDELONG,PROC_MODE_SIMULATION_ALL}; enum Init_View_Command {VIEW_RECIPE=0,VIEW_SCANIMAGE}; }; using namespace GLOBAL_DEFINE; class CProfileOption { public: int m_nProfileOff_C_X; int m_nProfileOff_C_Y; int m_nProfileOff_C_DN_X; int m_nProfileOff_C_DN_Y; int m_nProfileOff_A_X; int m_nProfileOff_A_Y; int m_nProfileOff_A_DN_X; int m_nProfileOff_A_DN_Y; double m_dProfileRadius[MAX_STAGE_HAND_COUNT][MAX_PROFILE_SETTING_COUNT]; CProfileOption() { Reset(); } void Reset() { m_nProfileOff_C_X = m_nProfileOff_C_Y = m_nProfileOff_C_DN_X = m_nProfileOff_C_DN_Y = 0; m_nProfileOff_A_X = m_nProfileOff_A_Y = m_nProfileOff_A_DN_X = m_nProfileOff_A_DN_Y = 0; ZeroMemory(m_dProfileRadius,sizeof(double)*MAX_STAGE_HAND_COUNT*MAX_PROFILE_SETTING_COUNT); } }; class CRandomData { public: double dMin; double dMax; double dLimit; CRandomData() { Reset(); } void Reset() { dMin = dMax = dLimit = 0; } }; class CRandomDataSet { public: CRandomData Profile; CRandomData ChamferUp; CRandomData ChamferDn; CRandomDataSet() { Reset(); } void Reset() { Profile.Reset(); ChamferUp.Reset(); ChamferDn.Reset(); } }; class CInspectOption { public: BOOL bSaveNotchi; BOOL bSaveCornerChip; BOOL bSaveCornerSP; BOOL bSaveSpline; BOOL bSaveEdge; BOOL bSaveDimension; BOOL bSaveSplineChip; BOOL bSaveCutArea;//20140611 BOOL bSaveChipDefectImg; int nNotchNoDetSkip; // Pixel int nNotchDetSkip; // Pixel int nChamferInsHeight; int nChamferSearchWidth; int nChippingInsArea; int nCrackINsArea; int nBrokenInsArea; // 20.11.14 - Candidate Filtering.. int nChippingInsMinSize; int nCrackInsMinSize; int nBrokenInsMinSize; int nBurrInsMinSize; int nChippingInsSideFilterRange; int nCrackInsSideFilterRange; int nBrokenInsSideFilterRnage; int nBurrInsSideFilterRange; BOOL bUseRandomData; CRandomDataSet B_GrindLine; CRandomDataSet C_GrindLine; CRandomDataSet D_GrindLine; CRandomDataSet A1_GrindLine; CRandomDataSet A2_GrindLine; CRandomDataSet A1_Rcut; CRandomDataSet A2_Rcut; CRandomDataSet C1_Rcut; CRandomDataSet C2_Rcut; int nAlignMarkRange; int nAlignMarkRangeY; CInspectOption() { Reset(); } void Reset() { bSaveNotchi = bSaveCornerChip = bSaveCornerSP = bSaveSpline = bSaveEdge = bSaveDimension = bSaveSplineChip = bSaveCutArea = FALSE;//20140611 bSaveChipDefectImg = FALSE; nNotchNoDetSkip = 10; nNotchDetSkip = 4; nChamferInsHeight = 100; nChamferSearchWidth = 30; nChippingInsArea = 100; nCrackINsArea = 200; nBrokenInsArea = 300; nChippingInsMinSize = nCrackInsMinSize = nBrokenInsMinSize = nBurrInsMinSize = 5; nChippingInsSideFilterRange = nCrackInsSideFilterRange = nBrokenInsSideFilterRnage = nBurrInsSideFilterRange = 10; bUseRandomData = FALSE; B_GrindLine.Reset(); C_GrindLine.Reset(); D_GrindLine.Reset(); A1_GrindLine.Reset(); A2_GrindLine.Reset(); A1_Rcut.Reset(); A2_Rcut.Reset(); C1_Rcut.Reset(); C2_Rcut.Reset(); nAlignMarkRange = 100; } }; typedef struct tagPROG_MSG { int nJobIndex; int nSide; int nState; int nDispLine; }PROG_MSG; struct _ST_MAPSETTINGS_INDEX { int m_nIndex[5][4]; }; struct _ST_MAPSETTINGS { _ST_MAPSETTINGS_INDEX m_nMapIndex[2]; }; class CInspectDefect; class CDefect; class CGlass_Data; interface IViewInterface2Parent { virtual void CommandExitButtonClick() = 0; virtual void MapDefect_ReqDefectImage(CInspectDefect* pDefect,int nGlassDefectIdx) = 0; virtual CDefect *ListDefect_ReqDefectImage(CInspectDefect* pDefect,int nGlassDefectIdx) = 0; virtual LPBYTE IV2M_GetGrabBufferByDimension(DimensionDir eDim,int iVline) = 0; virtual BOOL IV2M_SetLiveGrabCommand(DimensionDir eDim,BOOL bStop) = 0; virtual void IV2M_InitView(Init_View_Command eVew) = 0; virtual void IV2M_LoadImageFullFile(int iSide, CGlass_Data *pGlassData = NULL, std::function _Func = nullptr) = 0; virtual void IV2M_LoadImageFromFolder(int iSide, const CString& strFolderPath, CGlass_Data* pGlassData = NULL, std::function _Func = nullptr) = 0; virtual BOOL IV2M_SaveFullImage(CString strPath,int iSide,CPoint ptStart,int nLength) = 0; virtual BOOL IV2M_RecipeChange(CString strRecipe) = 0; virtual BOOL MLight_SetLightControlValue(int iCon,int iCh, int nValue, BOOL bRef, int nScanIdx = 0, BOOL bAdjLight = TRUE) = 0; virtual void MLight_OnOff(int iCon,int iCh,BOOL bValue) = 0; virtual int MLight_GetLightControlValue(int iCon,int iCh, BOOL bRef) = 0; virtual BOOL IV2M_InspectionProcess(DimensionDir eDim) = 0; virtual BOOL IV2M_InspectionProcessAll(int iProceMode) = 0; virtual std::multimap *IF2M_GetCADProfileLine(int iSide,int vStart,int vEnd)= 0; }; interface IUserDefectInterface2Parent { virtual void IU2P_DrawRect(BOOL bSet) = 0; virtual CRect IU2P_GetCompareRect() = 0; virtual void IU2P_DrawRefresh() = 0; virtual void IE2P_SetExpArea(int iSide) = 0; virtual POINT IE2P_GetFrameViewBasepoint() = 0; virtual void IE2P_SetExpAreaTrackerReset() = 0; virtual void IE2P_SetExpAreaDlgClose() = 0; }; #define IMAGE_WIDTH 8192//2048 #define IMAGE_HEIGHT 1024 #define MAX_IMAGE_FRAME 100 #define MAX_IMAGE_FRAME_SHORT 100 // ÃÖ´ë ÇÁ·¹ÀÓ ¼ö #define MAX_IMAGE_FRAME_LONG 100 // ÃÖ´ë ÇÁ·¹ÀÓ ¼ö #define MAX_IMAGE_LINE_SHORT MAX_IMAGE_FRAME_SHORT * IMAGE_HEIGHT // ÃÖ´ë ¶óÀμö #define MAX_IMAGE_LINE_LONG MAX_IMAGE_FRAME_LONG * IMAGE_HEIGHT // ÃÖ´ë ¶óÀμö #define MAX_IMAGE_LINE MAX_IMAGE_LINE_LONG #define MAX_LIMIT_LINE (MAX_IMAGE_FRAME - 1) * IMAGE_HEIGHT #define MAX_IMAGE_LINE_MARGIN (150 * IMAGE_HEIGHT) // ÃÖ´ë ¶óÀμö struct _ST_GDI_ITEM { COLORREF colorWhite; COLORREF colorRed; COLORREF colorYellow; COLORREF colorGreen; COLORREF colorBlue; COLORREF colorBlack; COLORREF colorLightGray; COLORREF colorDarkGray; COLORREF colorGray; COLORREF colorTitle; COLORREF colorLightBlue; COLORREF colorViolet; COLORREF colorLightYellow; COLORREF colorOrange; COLORREF colorLightRed; COLORREF colorLightGreen; COLORREF colorBrown; COLORREF colorSky; CBrush brushBk; CBrush brushDarkGray; CBrush brushWhite; CBrush brushBlue; CBrush brushLightBlue; CBrush brushBlack; CBrush brushRed; CBitmap BkBitmap; CBrush BrushBkPattern; }; enum THICK_INS_METHOD{THICK_METHOD_NORMAL=0,THICK_METHOD_EXTRA}; enum THICKPOS_DIRECTION{THICKPOS_LEFT=0,THICKPOS_RIGHT,THICKPOS_TOP,THICKPOS_BOTTOM}; typedef struct STU_THICKPOS_ { CRect rect; int iScan; int iFrame; double dThick; double xCoordi; double yCoordi; int nLeftLine; int nRightLine; int nTopLine; int nIndex; THICKPOS_DIRECTION nDir; THICK_INS_METHOD Insmethod; int nChamferThres; int nChipThres; int nJudgeBase; int nJudgeDiff_Plus; int nJudgeDiff_Minus; int nChipWidth; int nChipHeight; public: STU_THICKPOS_() { Reset(); } STU_THICKPOS_(STU_THICKPOS_ *pPos) { *this = *pPos; } void Reset() { nDir = THICKPOS_LEFT; iFrame = 0; dThick = 0; iScan = 0; nLeftLine = nRightLine = nTopLine = 0; rect = CRect(0,0,0,0); xCoordi = yCoordi = 0.; nIndex = 0; Insmethod = THICK_METHOD_NORMAL; nChamferThres = nChipThres = nJudgeBase = nJudgeDiff_Plus = nJudgeDiff_Minus = 0; nChipWidth = nChipHeight = 0; } }STU_THICKPOS, *pSTU_THICKPOS; typedef struct STU_DIMENSIONPOS_ { CRect rect; int iFrame; int nPixelTop; double dSize; double xCoordi; double yCoordi; double dPixelLeft; double dPixelRight; double dImageRight; int iIndex; public: STU_DIMENSIONPOS_() { iFrame = iIndex = 0; rect = CRect(0,0,0,0); xCoordi = yCoordi = dSize = 0.; dPixelLeft = dPixelRight = dImageRight = 0.; nPixelTop = 0; } }STU_DIMENSIONPOS, *pSTU_DIMENSIONPOS; typedef struct _INSPECTDIMENSION_BUFFER { int iCam; int iScan; int iIndex; int iFrame; BOOL bSuccess; DimensionDir enSide; double dLeft; double dRight; double dSize; LPBYTE pOrg; CSize szOrg; _INSPECTDIMENSION_BUFFER() { pOrg = NULL; Reset(); } void Reset() { iCam = iScan = iIndex = iFrame = -1; enSide = DIMENSION_NONE; dLeft = dRight = dSize = 0; bSuccess = FALSE; if(pOrg != NULL) delete[] pOrg; pOrg=NULL; szOrg = CSize(0,0); } void Clear() { if(pOrg == NULL || szOrg.cx <= 0 || szOrg.cy <= 0) return; ZeroMemory(pOrg,sizeof(BYTE)*szOrg.cx*szOrg.cy); } void SetSize(CSize szRe) { if(pOrg != NULL && szRe.cx <= szOrg.cx && szRe.cy <= szOrg.cy) return; if(pOrg != NULL) delete[] pOrg,pOrg=NULL; szOrg = szRe; pOrg = new BYTE[szOrg.cx*szOrg.cy]; Clear(); } void CopyBuffer(_INSPECTDIMENSION_BUFFER *pBuffer) { Reset(); iCam = pBuffer->iCam; iScan = pBuffer->iScan; iFrame = pBuffer->iFrame; iIndex = pBuffer->iIndex; bSuccess = pBuffer->bSuccess; enSide = pBuffer->enSide; dLeft = pBuffer->dLeft; dRight = pBuffer->dRight; dSize = pBuffer->dSize; szOrg = pBuffer->szOrg; if(pBuffer->pOrg != NULL && pBuffer->szOrg.cx > 0 && pBuffer->szOrg.cy > 0) { pOrg = new BYTE[szOrg.cx*szOrg.cy]; CopyMemory(pOrg,pBuffer->pOrg,szOrg.cx*szOrg.cy); } } } INSPECTDIMENSION_BUFFER, *pINSPECTDIMENSION_BUFFER; #define RANGE_VAL_COUNT 9 typedef struct STU_SPLINE_RESULT_ { enum EN_SPLINE_TYPE{SPLINE_RCUT=0,SPLINE_CCUT,SPLINE_NONE}; int iCam; int iScan; EN_SPLINE_TYPE enType; BOOL bPos; double dMinData; double dMaxData; double dAvg; double dRangeVal[RANGE_VAL_COUNT]; public: STU_SPLINE_RESULT_() { enType = SPLINE_NONE; bPos = TRUE; dMinData = dMaxData = dAvg = 0.; iCam = iScan = 0; ZeroMemory(dRangeVal,sizeof(double)*RANGE_VAL_COUNT);//20140528 } }STU_SPLINE_RESULT, *pSTU_SPLINE_RESULT; typedef struct _INSPECTSPLINE_BUFFER { enum SPLINE_SAVE_TYPE{SPLINE_TYPE_ORG=0,SPLINE_TYPE_RES}; enum EN_SPLINE_POSITION{SPLINE_TOPLEFT=0,SPLINE_TOPRIGHT,SPLINE_BOTTOMLEFT,SPLINE_BOTTOMRIGHT,SPLINE_POS_NONE}; int iCam; int iScan; int iFrame; int iType; EN_SPLINE_POSITION ePosition; BOOL bPos; double dMinVal; double dMaxVal; double dAvgVal; double dAvgThick; BOOL bSuccess; LPBYTE pOrg; LPBYTE pRes; CSize szOrg; CSize szRes; _INSPECTSPLINE_BUFFER() { pOrg = pRes = NULL; Reset(); } void Reset() { ePosition = SPLINE_POS_NONE; iCam = iScan = iType = iFrame = -1; bSuccess = bPos = FALSE; dMinVal = dMaxVal = dAvgVal = dAvgThick = 0.; if(pOrg != NULL) delete[] pOrg; pOrg=NULL; if(pRes != NULL) delete[] pRes; pRes=NULL; szOrg = szRes = CSize(0,0); } void Clear(SPLINE_SAVE_TYPE nOpt) { switch(nOpt) { case SPLINE_TYPE_ORG: if(pOrg != NULL && szOrg.cx > 0 && szOrg.cy > 0) ZeroMemory(pOrg,sizeof(BYTE)*szOrg.cx*szOrg.cy); break; case SPLINE_TYPE_RES: if(pRes != NULL && szRes.cx > 0 && szRes.cy > 0) ZeroMemory(pRes,sizeof(BYTE)*szRes.cx*szRes.cy); break; } } void SetBuffer(LPBYTE pBuf,CSize szImg,SPLINE_SAVE_TYPE nOpt) { if(pBuf == NULL || szImg.cx <= 0 || szImg.cy <= 0) return; SetSize(szImg,nOpt); switch(nOpt) { case SPLINE_TYPE_ORG: if(pOrg != NULL && szOrg.cx > 0 && szOrg.cy > 0) CopyMemory(pOrg,pBuf,sizeof(BYTE)*szOrg.cx*szOrg.cy); break; case SPLINE_TYPE_RES: if(pRes != NULL && szRes.cx > 0 && szRes.cy > 0) CopyMemory(pRes,pBuf,sizeof(BYTE)*szRes.cx*szRes.cy); break; } } void SetSize(CSize szRe,SPLINE_SAVE_TYPE nOpt) { switch(nOpt) { case SPLINE_TYPE_ORG: if(pOrg != NULL && szRe.cx <= szOrg.cx && szRe.cy <= szOrg.cy) return; if(pOrg != NULL) delete[] pOrg,pOrg=NULL; szOrg = szRe; pOrg = new BYTE[szOrg.cx*szOrg.cy]; break; case SPLINE_TYPE_RES: if(pRes != NULL && szRe.cx <= szRes.cx && szRe.cy <= szRes.cy) return; if(pRes != NULL) delete[] pRes,pRes=NULL; szRes = szRe; pRes = new BYTE[szRes.cx*szRes.cy]; break; } Clear(nOpt); } void CopyBuffer(_INSPECTSPLINE_BUFFER *pBuffer) { Reset(); if(pBuffer == NULL) return; ePosition = pBuffer->ePosition; iCam = pBuffer->iCam; iScan = pBuffer->iScan; iFrame = pBuffer->iFrame; iType = pBuffer->iType; bSuccess = pBuffer->bSuccess; bPos = pBuffer->bPos; dMinVal = pBuffer->dMinVal; dMaxVal = pBuffer->dMaxVal; dAvgVal = pBuffer->dAvgVal; dAvgThick = pBuffer->dAvgThick; szOrg = pBuffer->szOrg; szRes = pBuffer->szRes; if(pBuffer->pOrg != NULL && pBuffer->szOrg.cx > 0 && pBuffer->szOrg.cy > 0) { pOrg = new BYTE[szOrg.cx*szOrg.cy]; CopyMemory(pOrg,pBuffer->pOrg,szOrg.cx*szOrg.cy); } if(pBuffer->pRes != NULL && pBuffer->szRes.cx > 0 && pBuffer->szRes.cy > 0) { pRes = new BYTE[szRes.cx*szRes.cy]; CopyMemory(pRes,pBuffer->pRes,szRes.cx*szRes.cy); } } } INSPECTSPLINE_BUFFER, *pINSPECTSPLINE_BUFFER; #define NOTCH_RANGE_VAL_MAX_COUNT 100//20140528 typedef struct STU_NOTCH_RESULT_ { int iCam; int iScan; double dMaxData; double dAvg; double dRangeVal[NOTCH_RANGE_VAL_MAX_COUNT];//20140528 CPoint pointCAD[NOTCH_RANGE_VAL_MAX_COUNT];//20140528 CPoint pointIMG[NOTCH_RANGE_VAL_MAX_COUNT];//20140528 double dRangeVal_Dy[NOTCH_RANGE_VAL_MAX_COUNT];//20140528 CPoint pointCAD_Dy[NOTCH_RANGE_VAL_MAX_COUNT];//20140528 CPoint pointIMG_Dy[NOTCH_RANGE_VAL_MAX_COUNT];//20140528 double dRangeVal_Cham[NOTCH_RANGE_VAL_MAX_COUNT];//20140528 CPoint pointCAD_Cham[NOTCH_RANGE_VAL_MAX_COUNT];//20140528 CPoint pointIMG_Cham[NOTCH_RANGE_VAL_MAX_COUNT];//20140528 double dAvgThick; double dDx; double dDy; double dAlignX; double dAlignY; double dNotchX; double dNotchY; int nNotchInsCount;//20140528 public: STU_NOTCH_RESULT_() { dMaxData = dAvg = dAvgThick = 0.; iCam = iScan = 0; ZeroMemory(dRangeVal,sizeof(double)*NOTCH_RANGE_VAL_MAX_COUNT);//20140528 ZeroMemory(pointCAD,sizeof(CPoint)*NOTCH_RANGE_VAL_MAX_COUNT);//20140528 ZeroMemory(pointIMG,sizeof(CPoint)*NOTCH_RANGE_VAL_MAX_COUNT);//20140528 ZeroMemory(dRangeVal_Dy,sizeof(double)*NOTCH_RANGE_VAL_MAX_COUNT);//20140528 ZeroMemory(pointCAD_Dy,sizeof(CPoint)*NOTCH_RANGE_VAL_MAX_COUNT);//20140528 ZeroMemory(pointIMG_Dy,sizeof(CPoint)*NOTCH_RANGE_VAL_MAX_COUNT);//20140528 ZeroMemory(dRangeVal_Cham,sizeof(double)*NOTCH_RANGE_VAL_MAX_COUNT);//20140528 ZeroMemory(pointCAD_Cham,sizeof(CPoint)*NOTCH_RANGE_VAL_MAX_COUNT);//20140528 ZeroMemory(pointIMG_Cham,sizeof(CPoint)*NOTCH_RANGE_VAL_MAX_COUNT);//20140528 dDx = dDy = 0.; dAlignX = dAlignY = dNotchX = dNotchY = 0.; nNotchInsCount = NOTCH_RANGE_VAL_MAX_COUNT;//20140528 } }STU_NOTCH_RESULT, *pSTU_NOTCH_RESULT; typedef struct _INSPECTNOTCH_BUFFER { int iCamIdx; int iScanIdx; int iFrame; BOOL bSuccess; DimensionDir enSide; double dAvg; double dMax; LPBYTE pOrg; CSize szOrg; LPBYTE pOrg_Dy; CSize szOrg_Dy; _INSPECTNOTCH_BUFFER() { pOrg = NULL; pOrg_Dy = NULL; Reset(); } void Reset() { iCamIdx = iScanIdx = iFrame = -1; enSide = DIMENSION_NONE; dAvg = dMax = 0; bSuccess = FALSE; if(pOrg != NULL) delete[] pOrg; pOrg=NULL; szOrg = CSize(0,0); if(pOrg_Dy != NULL) delete[] pOrg_Dy; pOrg_Dy=NULL; szOrg_Dy = CSize(0,0); } void Clear() { if(pOrg == NULL || szOrg.cx <= 0 || szOrg.cy <= 0) return; ZeroMemory(pOrg,sizeof(BYTE)*szOrg.cx*szOrg.cy); } void Clear_Dy() { if(pOrg_Dy == NULL || szOrg_Dy.cx <= 0 || szOrg_Dy.cy <= 0) return; ZeroMemory(pOrg_Dy,sizeof(BYTE)*szOrg_Dy.cx*szOrg_Dy.cy); } void SetSize(CSize szRe) { if(szRe.cx <= 0 || szRe.cy <=0) return; if(pOrg != NULL) delete[] pOrg,pOrg=NULL; szOrg = szRe; pOrg = new BYTE[szOrg.cx*szOrg.cy]; Clear(); } void SetSize_Dy(CSize szRe) { if(szRe.cx <= 0 || szRe.cy <=0) return; if(pOrg_Dy != NULL) delete[] pOrg_Dy,pOrg_Dy=NULL; szOrg_Dy = szRe; pOrg_Dy = new BYTE[szOrg_Dy.cx*szOrg_Dy.cy]; Clear_Dy(); } void CopyBuffer(_INSPECTNOTCH_BUFFER *pBuffer) { Reset(); iCamIdx = pBuffer->iCamIdx; iScanIdx = pBuffer->iScanIdx; iFrame = pBuffer->iFrame; bSuccess = pBuffer->bSuccess; enSide = pBuffer->enSide; dAvg = pBuffer->dAvg; dMax = pBuffer->dMax; szOrg = pBuffer->szOrg; if(pBuffer->pOrg != NULL && pBuffer->szOrg.cx > 0 && pBuffer->szOrg.cy > 0) { pOrg = new BYTE[szOrg.cx*szOrg.cy]; CopyMemory(pOrg,pBuffer->pOrg,szOrg.cx*szOrg.cy); } } void CopyBuffer_Dy(_INSPECTNOTCH_BUFFER *pBuffer) { Reset(); iCamIdx = pBuffer->iCamIdx; iScanIdx = pBuffer->iScanIdx; iFrame = pBuffer->iFrame; bSuccess = pBuffer->bSuccess; enSide = pBuffer->enSide; dAvg = pBuffer->dAvg; dMax = pBuffer->dMax; szOrg_Dy = pBuffer->szOrg_Dy; if(pBuffer->pOrg_Dy != NULL && pBuffer->szOrg_Dy.cx > 0 && pBuffer->szOrg_Dy.cy > 0) { pOrg_Dy = new BYTE[szOrg_Dy.cx*szOrg_Dy.cy]; CopyMemory(pOrg_Dy,pBuffer->pOrg_Dy,szOrg_Dy.cx*szOrg_Dy.cy); } } } INSPECTNOTCH_BUFFER, *pINSPECTNOTCH_BUFFER; typedef struct STU_CORNER_RESULT_ { enum EN_CORNER_TYPE{CORNER_RCUT=0,CORNER_CCUT,CORNER_NONE}; int iCam; int iScan; EN_CORNER_TYPE enType; BOOL bPos; double dResultWidth; double dResultHeight; public: STU_CORNER_RESULT_() { enType = CORNER_NONE; bPos = TRUE; dResultWidth = dResultHeight = 0.; iCam = iScan = 0; } }STU_CORNER_RESULT, *pSTU_CORNER_RESULT; typedef struct _INSPECTFULLIMAGE_BUFFER { int iCamIdx; int iScanIdx; LPBYTE pImage; CSize szImage; _INSPECTFULLIMAGE_BUFFER() { pImage = NULL; Reset(); } void Reset() { iCamIdx = iScanIdx = -1; if(pImage != NULL) delete[] pImage; pImage=NULL; szImage = CSize(0,0); } void Clear() { if(pImage == NULL || szImage.cx <= 0 || szImage.cy <= 0) return; ZeroMemory(pImage,sizeof(BYTE)*szImage.cx*szImage.cy); } void SetSize(CSize szRe) { if(pImage != NULL && szRe.cx <= szImage.cx && szRe.cy <= szImage.cy) { Clear(); return; } if(pImage != NULL) delete[] pImage,pImage=NULL; szImage = szRe; pImage = new BYTE[szImage.cx*szImage.cy]; Clear(); } } INSPECTFULLIMAGE_BUFFER, *pINSPECTFULLIMAGE_BUFFER;