#pragma once #include "cv.h" #include "highgui.h" #include "opencv.hpp" #include "core.hpp" #include #include //20140528 #include "HardwareSettings.h" #define MAX_STRING_LENGTH 1024 typedef struct tagJUDGEEDGE { BOOL bError; // 错误与否… int nRefernce; // 标准 int nTolPlus; // +容许误差 int nTolMinus; // -容许误差 int nSlant; // 斜线 }JUDGEEDGE, *PJUDGEEDGE; typedef struct tagUserDefectArea { int x; int y; int area_width; int area_height; int defect_threshold; int defect_dilation; int defect_width; int defect_height; void clear(void) { x = 0; y = 0; area_width = 0; area_height = 0; defect_threshold = 0; defect_dilation = 0; defect_width = 0; defect_height = 0; } tagUserDefectArea(void) { clear(); } }ST_USER_DEFECT_AREA; typedef struct tagEXECPTION_AREA { int nAreaType; CRect rc; // 区域位置(Mark 原点) SIZE szErrSize; // 在这个领域适用的Size int nAppDefect; // 适用的Defect种类 int nDetectLimitedArea; // 是否使用自定义ROI void Init() { nAreaType = 0; nAppDefect = 0; nDetectLimitedArea = 0; rc = CRect(0,0,0,0); szErrSize.cx = 0; szErrSize.cy = 0; }; void CopyData(tagEXECPTION_AREA *pExp) { nAreaType = pExp->nAreaType; rc = pExp->rc; szErrSize = pExp->szErrSize; nAppDefect = pExp->nAppDefect; nDetectLimitedArea = pExp->nDetectLimitedArea; } }EXECPTION_AREA; typedef std::vector EXCEPTION_AREA_LIST; typedef EXCEPTION_AREA_LIST::iterator itEXCEPTION_AREA_LIST; typedef std::vector USER_DEFECT_AREA_LIST; typedef std::vector::iterator itUSER_DEFECT_AREA_LIST; typedef struct stLinkList { CString m_strUpperName; CString m_strStepName; CString m_strInsName; public: stLinkList() { reset(); } void reset() { m_strUpperName = _T(""); m_strStepName = _T(""); m_strInsName = _T(""); } } LinkList, *pLinkList; typedef std::vector VectorLinkList; typedef std::vector::iterator VectorLinkListIt; class CRECIPE_INFO_PARM { public: CRECIPE_INFO_PARM(); virtual ~CRECIPE_INFO_PARM(void); CRECIPE_INFO_PARM& operator=(CRECIPE_INFO_PARM& rh); public: BOOL ReadRecipe(CConfig *pFile); BOOL WriteRecipe(CConfig *pFile); public: void Reset(); void SetRecipeName(CString strRecipe); void SetRecipeFileName(CString strFile); void SetRecipeFileNameBackUp(CString strFile); CString GetRecipeName(); CString GetRecipeFileName(); public: TCHAR m_strRecipeName[MAX_STRING_LENGTH]; // 配方名称 TCHAR m_strRecipeFileName[MAX_STRING_LENGTH]; // 配方文件名称 TCHAR m_strRecipeFileNameBackUp[MAX_STRING_LENGTH]; // 配方文件名备份 int m_nSoftRevision; }; typedef struct _STU_EXTRA_CHIP_REG { DimensionDir enSide; BOOL bTB; int nStartY; int nYSize; int nSizeX; int nChamferThres; int nChipThres; int nJudgeBase; int nJudgeDiff; int nChipWidth; int nChipHeight; _STU_EXTRA_CHIP_REG() { Reset(); } void Reset() { enSide = DIMENSION_NONE; nStartY = nYSize = 0; nSizeX = nChamferThres = nChipThres = 0; nJudgeBase = nJudgeDiff = 0; nChipWidth = nChipHeight = 0; } } STU_EXTRA_CHIP_REG, *pSTU_EXTRA_CHIP_REG; typedef struct _STU_CUTAREA_EXP_POS { DimensionDir enSide; int nPosY; int nSize; ExpRegionType enERType; int nPosX; int nSizeX; _STU_CUTAREA_EXP_POS() { Reset(); } void Reset() { enSide = DIMENSION_NONE; nPosY = nSize = 0; enERType = ER_NONE; nPosX = nSizeX = 0; } } STU_CUTAREA_EXP_POS, *pSTU_CUTAREA_EXP_POS; typedef struct _STU_CUTAREA_PARM { BOOL m_bCutArea; int m_nThresT,m_nThresB; int m_nSearchWidth; int m_nCalArea; _STU_CUTAREA_PARM() { Reset(); } void Reset() { m_bCutArea = FALSE; m_nThresT = m_nThresB = m_nSearchWidth = m_nCalArea = 0; } } STU_CUTAREA_PARM, *pSTU_CUTAREA_PARM; typedef struct _STU_CUTAREA_ALIGN_MARK//20140611 { BOOL m_bCutAreaAlignMark; int m_nMarkXPos[2]; int m_nMarkXSize[2]; int m_nMarkYPos[2]; int m_nMarkYSize[2]; int m_nAlign2GlassPos; _STU_CUTAREA_ALIGN_MARK() { Reset(); } void Reset() { m_bCutAreaAlignMark = FALSE; for (int i=0; i<2; i++) { m_nMarkXPos[i] = 0; m_nMarkXSize[i] = 0; m_nMarkYPos[i] = 0; m_nMarkYSize[i] = 0; } m_nAlign2GlassPos = 0; } } STU_CUTAREA_ALIGN_MARK, *pSTU_CUTAREA_ALIGN_MARK; typedef struct _STU_CHIP_PARM { BOOL m_bChipping; int m_nThresMode; // 0:Fixed,1:First Line,2:Max Line int m_nChippingInsArea; int m_nCrackINsArea; int m_nBrokenInsArea; int m_nChippingThres_T; int m_nChippingThres_T_White; int m_nChipDiffThres; int m_nChippingThres_B; int m_nChippingThres_T_L; int m_nChippingThres_B_L; int m_nCrackThres; int m_nBrokenThres; // 20.11.14 - Candidate Filtering.. int m_nChippingInsMinSize; int m_nCrackInsMinSize; int m_nBrokenInsMinSize; int m_nBurrInsMinSize; int m_nChippingInsSideFilterRange; int m_nCrackInsSideFilterRange; int m_nBrokenInsSideFilterRnage; int m_nBurrInsSideFilterRange; _STU_CHIP_PARM() { Reset(); } void Reset() { m_nThresMode = 0; m_bChipping = FALSE; m_nChippingInsArea = m_nChippingThres_T = m_nChippingThres_B = 0; m_nChippingThres_T_White = 255; m_nCrackINsArea = m_nBrokenInsArea = 0; m_nChippingThres_T_L = m_nChippingThres_B_L = 0; m_nCrackThres = m_nBrokenThres = 0; m_nChipDiffThres = 255; m_nChippingInsMinSize = m_nCrackInsMinSize = m_nBrokenInsMinSize = m_nBurrInsMinSize = 5; m_nChippingInsSideFilterRange = m_nCrackInsSideFilterRange = m_nBrokenInsSideFilterRnage = m_nBurrInsSideFilterRange = 10; } } STU_CHIP_PARM, *pSTU_CHIP_PARM; class CCUTAREA_PARM { public: CCUTAREA_PARM(); virtual ~CCUTAREA_PARM(void); CCUTAREA_PARM& operator=(CCUTAREA_PARM& rh); public: BOOL ReadRecipe(CConfig *pFile); BOOL WriteRecipe(CConfig *pFile); public: void Reset(); CString GetFileString(void *pValue); BOOL GetCutAreaUse(int iPos); BOOL GetChipUse(int iPos); BOOL GetCutAreaAlignMarkUse(int iPos);//20140611 pSTU_CUTAREA_PARM GetCutAreaParm(int iPos) { if(iPos>=0 && iPos=0 && iPos *GetExpArea(int iPos){return iPos>=0&&iPos=0 && iPos m_vecCutAreaExpPos[MAX_DIMENSION_COUNT]; STU_CUTAREA_ALIGN_MARK m_stuCutAreaAlignMark[MAX_DIMENSION_COUNT];//20140611 }; class CCORNER_PARM { public: CCORNER_PARM(); virtual ~CCORNER_PARM(void); CCORNER_PARM& operator=(CCORNER_PARM& rh); public: BOOL ReadRecipe(CConfig *pFile); BOOL WriteRecipe(CConfig *pFile); public: void Reset(); CString GetFileString(void *pValue); public: BOOL m_bSaveImage; BOOL m_bUse; int m_Thres[MAX_DIMENSION_COUNT]; }; enum DIMEN_FIND_TYPE{DIM_TYPE_PATTERN=0,DIM_TYPE_BMPOS,DIM_TYPE_NONE}; typedef struct _STU_DI_POS { int nBasePosX; int nBasePosY; int nSearchX; int nSearchY; _STU_DI_POS() { nBasePosX = nBasePosY = nSearchX = nSearchY = 0; } } STU_DI_POS, *pSTU_DI_POS; typedef struct _STU_DIMEN_INS_PRM { BOOL m_bUsePos; int m_nCamDir; int m_nJudgeSetSize; int m_nJudgeSizeRange; int m_nOffset; int m_nDetThres; DIMEN_FIND_TYPE m_enDimenType; _STU_DIMEN_INS_PRM() { Reset(); } void Reset() { m_bUsePos = FALSE; m_nJudgeSetSize = m_nJudgeSizeRange = m_nOffset = m_nDetThres = m_nCamDir = 0; m_enDimenType = DIM_TYPE_NONE; } } STU_DIMEN_INS_PRM, *pSTU_DIMEN_INS_PRM; class CDIMENSION_PARM { public: CDIMENSION_PARM(); virtual ~CDIMENSION_PARM(void); CDIMENSION_PARM& operator=(CDIMENSION_PARM& rh); public: BOOL ReadRecipe(CConfig *pFile); BOOL WriteRecipe(CConfig *pFile); public: void Reset(); CString GetFileString(void *pValue); BOOL GetDimenUse(int iPos); pSTU_DIMEN_INS_PRM GetDimenIns(int iPos){return iPos>=0&&iPos *GetDimenPos(int iPos){return iPos>=0&&iPos m_vecDiPosition[MAX_DIMENSION_COUNT]; }; typedef struct _STU_SPLINE_CHIP_POS { enum MAKE_IMAGE_METHOD{MAKE_METHOD_LINEAR=0,MAKE_METHOD_REGRESSION,MAKE_METHOD_NONE}; enum MAKE_IMAGE_POS{MAKE_IMAGE_POS_CCUT=0,MAKE_IMAGE_POS_RCUT,MAKE_IMAGE_POS_NONE}; enum SPLINE_INS_DIRECTION{SPLINE_INS_DIRECTION_X=0,SPLINE_INS_DIRECTION_Y,SPLINE_INS_DIRECTION_NONE}; BOOL bUse; int nStartX; int nEndX; int nThres; int nFindThres; int nInsRange; int nSkipDist; MAKE_IMAGE_METHOD emMethod; MAKE_IMAGE_POS emPos; SPLINE_INS_DIRECTION emDir; _STU_SPLINE_CHIP_POS() { Reset(); } void Reset() { bUse = FALSE; nStartX = nEndX = nThres = nFindThres = nInsRange = nSkipDist = 0; emMethod = MAKE_METHOD_NONE; emPos = MAKE_IMAGE_POS_NONE; emDir = SPLINE_INS_DIRECTION_NONE; } } STU_SPLINE_CHIP_POS, *pSTU_SPLINE_CHIP_POS; typedef struct _STU_SPLINE_CHIP_PARM { BOOL m_bSplineChip; int m_nChipSize_Y; int m_nChipSize_X; BOOL m_bChipJudgeAnd; int m_nChipInsArea; int m_nChipThres; BOOL m_bCornerUse; int m_nCornerThres; int m_nCornerRange; double m_dChipStartTheta; double m_dChipEndTheta; double m_dChipDistTheta; _STU_SPLINE_CHIP_PARM() { Reset(); } void Reset() { m_bSplineChip = FALSE; m_bChipJudgeAnd = FALSE; m_nChipSize_X = m_nChipSize_Y = 0; m_nChipInsArea = m_nChipThres = 0; m_bCornerUse = m_nCornerThres = m_nCornerRange = 0; m_dChipDistTheta = m_dChipEndTheta = m_dChipDistTheta = 0; } } STU_SPLINE_CHIP_PARM, *pSTU_SPLINE_CHIP_PARM; enum EM_SPLINE_TYPE{EM_SP_CCUT=0,EM_SP_RCUT,EM_SP_NONE}; typedef struct _STU_SPLINE_INS_PARM { BOOL m_bSpline; BOOL m_bSplinePointJudge; int m_DetMinPointDist; int m_nStartCornerSize_Y; int m_nStartCornerRadius_um; int m_nEndCornerSize_Y; int m_nEndCornerRadius_um; int m_DetMinDist; int m_nLineThres; EM_SPLINE_TYPE m_emSPType; BOOL m_bSplineCorner; int m_nStartChamferSize; int m_nEndChamferSize; _STU_SPLINE_INS_PARM() { Reset(); } void Reset() { m_bSpline = FALSE; m_bSplinePointJudge = FALSE; m_DetMinPointDist = 50; m_nStartCornerSize_Y = 0; m_nStartCornerRadius_um = 0; m_nEndCornerSize_Y = 0; m_nEndCornerRadius_um = 0; m_nLineThres = 0; m_DetMinDist = 50; m_emSPType = EM_SP_NONE; m_bSplineCorner = FALSE; m_nStartChamferSize = -1; m_nEndChamferSize = -1; } } STU_SPLINE_INS_PARM, *pSTU_SPLINE_INS_PARM; class CSPLINE_PARM { public: CSPLINE_PARM(); virtual ~CSPLINE_PARM(void); CSPLINE_PARM& operator=(CSPLINE_PARM& rh); public: BOOL ReadRecipe(CConfig *pFile); BOOL WriteRecipe(CConfig *pFile); public: void Reset(); CString GetFileString(void *pValue); BOOL GetSplineUse(int iPos); BOOL GetSplineUsePointJudge(int iPos); BOOL GetSplineChipUse(int iPos); pSTU_SPLINE_INS_PARM GetSplineIns(int iPos){return iPos>=0&&iPos=0&&iPos *GetSplineChipPos(int iPos){return iPos>=0&&iPos m_vecSplineChip[MAX_DIMENSION_COUNT]; }; typedef struct _STU_NOTCH_POS//20140528 { int nPosX; int nPosY; _STU_NOTCH_POS() { nPosX = nPosY = 0; } } STU_NOTCH_POS, *pSTU_NOTCH_POS; enum EM_NOTCH_INS_DIR{INS_DIR_NORMAL = 0, INS_DIR_DY, INS_DIR_NONE}; typedef struct _STU_NOTCH_DATA { BOOL bChipIns; BOOL bSizeIns; int nChipDiff; int nSizeDiff; int nDetThres; int nSizeThres; int nChipThres; double dBlank2EdgeRatio; int nVStart; int nVSize; int nMarkXPos[2]; int nMarkXSize[2]; int nMarkYPos[2]; int nMarkYSize[2]; int nAlign2GlassPos; int nJudgeBaseWidth; int nJudgeDiffWidth; int nSkipSize; BOOL bSpChipIns[2]; int nSpChipSize[2]; BOOL bPointInsDimensionJudge;//20140528 BOOL bPointInsChamferJudge;//20140721 int nPointInsAveCount;//20140528 _STU_NOTCH_DATA() { Reset(); } void Reset() { bChipIns = bSizeIns = FALSE; nChipDiff = nSizeDiff = 0; nDetThres = nSizeThres = 0; nChipThres = nVStart = nVSize = 0; ZeroMemory(nMarkXPos,sizeof(int)*2); ZeroMemory(nMarkXSize,sizeof(int)*2); ZeroMemory(nMarkYPos,sizeof(int)*2); ZeroMemory(nMarkYSize,sizeof(int)*2); nJudgeBaseWidth = nJudgeDiffWidth = 0; nAlign2GlassPos = 0; nSkipSize = 0; dBlank2EdgeRatio = 0.; ZeroMemory(bSpChipIns,sizeof(BOOL)*2); ZeroMemory(nSpChipSize,sizeof(int)*2); bPointInsDimensionJudge = FALSE;//20140721 bPointInsChamferJudge = FALSE;//20140721 nPointInsAveCount = 5; } } STU_NOTCH_DATA, *pSTU_NOTCH_DATA; #define MAX_NOTCH_INS_POS_COUNT 100//20140528 class CNOTCH_PARM { public: CNOTCH_PARM(); virtual ~CNOTCH_PARM(void); CNOTCH_PARM& operator=(CNOTCH_PARM& rh); public: BOOL ReadRecipe(CConfig *pFile); BOOL WriteRecipe(CConfig *pFile); public: void Reset(); CString GetFileString(void *pValue); BOOL GetNotchSizeUse(int iPos); BOOL GetNotchChipUse(int iPos); pSTU_NOTCH_DATA GetNotchIns(int iPos){return iPos>=0&&iPos *GetNotchPos(int iPos){return iPos>=0&&iPos m_vecNotchPosition[MAX_DIMENSION_COUNT];//20140528 }; typedef struct _SortCPointYPos {//20140528 BOOL operator() (CPoint pt1, CPoint pt2) { return (pt1.y < pt2.y);} } SortCPointYPos; class CVCR_PARM { public: CVCR_PARM(); virtual ~CVCR_PARM(void); CVCR_PARM& operator=(CVCR_PARM& rh); public: BOOL ReadRecipe(CConfig *pFile); BOOL WriteRecipe(CConfig *pFile); public: void Reset(); CString GetFileString(void *pValue); CRect GetRect(); public: BOOL m_bVCR; BOOL m_bAlarm; BOOL m_bSetResult; int m_nVCPosY; int m_nVCPosX; int m_nHeight; int m_nWidth; BOOL m_nCamDir; }; class CETC_PARM { public: CETC_PARM(); virtual ~CETC_PARM(void); CETC_PARM& operator=(CETC_PARM& rh); public: BOOL ReadRecipe(CConfig *pFile,int nIdx); BOOL WriteRecipe(CConfig *pFile,int nIdx); public: void Reset(); CString GetFileString(void *pValue,int nIdx); public: int m_nGlassFindthres_Top; int m_nGlassFindHeight_Top; int m_nGlassFindthres_Left; int m_nGlassFindWidth_Left; int m_nGlassLeftLineMargin[2]; }; //park enum LIGHT_CONTROL_METHOD{LIGHT_CONTROL_METHOD_AUTO=0,LIGHT_CONTROL_METHOD_MANUAL,LIGHT_CONTROL_METHOD_NONE}; #define LIGHT_CONTROL_COUNT 2 #define LIGHT_CONTROL_CH_COUNT 4 class CLIGHT_PARM { public: CLIGHT_PARM(); virtual ~CLIGHT_PARM(void); CLIGHT_PARM& operator=(CLIGHT_PARM& rh); public: BOOL ReadRecipe(CConfig *pFile); BOOL WriteRecipe(CConfig *pFile); public: void Reset(); CString GetFileString(void *pValue); public: BOOL m_bLightControl; int m_nContValue[LIGHT_CONTROL_COUNT][LIGHT_CONTROL_CH_COUNT]; void SetContValue(int nIdx, int nCh, int nContValue); }; enum EM_GLASSTYPE_COMP{GLASSTYPE_RCUT=0,GLASSTYPE_CCUT,GLASSTYPE_NCUT}; class CGLASS_INFO_PARM { public: CGLASS_INFO_PARM(); virtual ~CGLASS_INFO_PARM(void); CGLASS_INFO_PARM& operator=(CGLASS_INFO_PARM& rh); public: void Reset(); BOOL ReadRecipe(CConfig *pFile); BOOL WriteRecipe(CConfig *pFile); double GetOneScanTime(){return m_dOneScanTime;} BOOL GetOneSacnMode(){return m_bOneScanMode;} protected: CString GetFileString(void *pValue); public: int m_nGlassSizeX; int m_nGlassSizeY; int m_nGlassImageSize; int m_nGlassImageLeftMargin; BOOL m_bGlassFullImageSave; BOOL m_bAllImageSave; GlassDirection m_OriginDirection; CString m_strDisp; BOOL m_bGlassDefaultImageSave; BOOL m_bOneScanMode; BOOL m_bPanelReverse; double m_dOneScanTime; EM_GLASSTYPE_COMP m_emGlassType; int m_nFindGlassStartOffset[MAX_DIMENSION_COUNT]; int m_nGlassFindHorPos[MAX_DIMENSION_COUNT]; }; typedef struct stuDEFECT_CONDITION { BOOL bError; // 是否发生错误 BOOL bConditionAND; // TRUE: Width和Height都满足才会发生Error SIZE szDefect; // Defect大小 int nMerge; // 合并 stuDEFECT_CONDITION(void) { bError = FALSE; bConditionAND = FALSE; szDefect.cx = 0; szDefect.cy = 0; nMerge = 0; } }DEFECT_CONDITION; typedef struct tagJUDGE_DEFECT { DEFECT_CONDITION Chip_Side; DEFECT_CONDITION Burr_Side; DEFECT_CONDITION Broken; DEFECT_CONDITION Bevel; DEFECT_CONDITION Chip_CF; DEFECT_CONDITION Burr_CF; DEFECT_CONDITION Crack; DEFECT_CONDITION Compare_Panel; int nRangeStart; int nRangeEnd; }JUDGE_DEFECT, *PJUDGE_DEFECT; typedef struct tagJUDGE_EDGE { BOOL bError; // 错误与否 int nRefernce; // 标准 int nTolPlus; // +容许误差 int nTolMinus; // -容许误差 }JUDGE_EDGE, *PJUDGE_EDGE; typedef struct tagJUDGE_AVG { BOOL bUse; int nDiff; }JUDGE_AVG, *PJUDGE_AVG; #define MAX_MARKER_COUNT 3 #define MAX_POS_MARKER_COUNT 3 class CINSPECT_JUDGEMENT_PARM { public: CINSPECT_JUDGEMENT_PARM(void); virtual ~CINSPECT_JUDGEMENT_PARM(void); CINSPECT_JUDGEMENT_PARM& operator=(CINSPECT_JUDGEMENT_PARM& rh); public: BOOL ReadRecipe(CConfig *pFile); BOOL WriteRecipe(CConfig *pFile); public: void Reset(); public: JUDGE_EDGE corner_X[MAX_PANEL_SIDE]; JUDGE_EDGE corner_Y[MAX_PANEL_SIDE]; JUDGE_EDGE grind[2][MAX_PANEL_SIDE]; JUDGE_EDGE chamfer[2][MAX_PANEL_SIDE]; JUDGE_EDGE cutting[2][MAX_PANEL_SIDE]; // 截断量判定标准 CPoint ptAlign[MAX_MARKER_COUNT][MAX_DIMENSION_COUNT]; JUDGE_EDGE EdgeToSubMark[MAX_DIMENSION_COUNT]; JUDGE_DEFECT defect[MAX_DIMENSION_COUNT][3]; JUDGE_EDGE Dimension[MAX_DIMENSION_COUNT]; int nCFGrind[MAX_PANEL_SIDE]; BOOL bUseLengthDepthComp; int nCornerJugeLength; int nCornerJugeDepth; BOOL bCoordProUse; JUDGE_AVG AvgProfile[MAX_DIMENSION_COUNT]; JUDGE_AVG AvgChamfer[MAX_DIMENSION_COUNT]; int nMinProfileNgCount[MAX_DIMENSION_COUNT]; int nMinProfileNgCount_MinDiff[MAX_DIMENSION_COUNT]; }; class CINSPECT_INFO_PARM { public: CINSPECT_INFO_PARM(void); virtual ~CINSPECT_INFO_PARM(void); CINSPECT_INFO_PARM& operator=(CINSPECT_INFO_PARM& rh); public: BOOL ReadRecipe(CConfig *pFile); BOOL WriteRecipe(CConfig *pFile); public: void Reset(); BOOL GetCutAreaUse(DimensionDir enDimen){return m_CutAreaParm.GetCutAreaUse((int)enDimen);} BOOL GetCutAreaAlignMarkUse(DimensionDir enDimen){return m_CutAreaParm.GetCutAreaAlignMarkUse((int)enDimen);} BOOL GetChipUse(DimensionDir enDimen){return m_CutAreaParm.GetChipUse((int)enDimen);} BOOL GetDimenUse(DimensionDir enDimen){return m_DimensionParm.GetDimenUse((int)enDimen);} BOOL GetSplineUse(DimensionDir enDimen){return m_SplineParm.GetSplineUse((int)enDimen);} BOOL GetSplineChipUse(DimensionDir enDimen){return m_SplineParm.GetSplineChipUse((int)enDimen);} BOOL GetNotchSizeUse(DimensionDir enDimen){return m_NotchParm.GetNotchSizeUse((int)enDimen);} BOOL GetNotchChipUse(DimensionDir enDimen){return m_NotchParm.GetNotchChipUse((int)enDimen);} BOOL GetSplineUsePointJudge(int iPos){return m_SplineParm.GetSplineUsePointJudge(iPos);} CCUTAREA_PARM *GetCutParm(){return &m_CutAreaParm;} pSTU_CUTAREA_PARM GetCutAreaParm(DimensionDir enDimen){return m_CutAreaParm.GetCutAreaParm((int)enDimen);} pSTU_CHIP_PARM GetChipParm(DimensionDir enDimen){return m_CutAreaParm.GetChipParm((int)enDimen);} std::vector *GetExpArea(DimensionDir enDimen){return m_CutAreaParm.GetExpArea((int)enDimen);} pSTU_CUTAREA_ALIGN_MARK GetCutAreaAlignMark(DimensionDir enDimen){return m_CutAreaParm.GetCutAreaAlignMark((int)enDimen);}//20140611 CCORNER_PARM *GetCornerParm(){return &m_CornerParm;} CDIMENSION_PARM *GetDimensionParm(){return &m_DimensionParm;} pSTU_DIMEN_INS_PRM GetDimenIns(DimensionDir enDimen){return m_DimensionParm.GetDimenIns((int)enDimen);} std::vector *GetDimenPos(DimensionDir enDimen){return m_DimensionParm.GetDimenPos((int)enDimen);} CSPLINE_PARM *GetSplineParm(){return &m_SplineParm;} pSTU_SPLINE_INS_PARM GetSplineIns(DimensionDir enDimen){return m_SplineParm.GetSplineIns((int)enDimen);} pSTU_SPLINE_CHIP_PARM GetSplineChipIns(DimensionDir enDimen){return m_SplineParm.GetSplineChipIns((int)enDimen);} std::vector *GetSplineChipPos(DimensionDir enDimen){return m_SplineParm.GetSplineChipPos((int)enDimen);} CNOTCH_PARM *GetNotchParm(){return &m_NotchParm;} pSTU_NOTCH_DATA GetNotchIns(DimensionDir enDimen){return m_NotchParm.GetNotchIns((int)enDimen);} public: CVCR_PARM m_VCRParm; CCUTAREA_PARM m_CutAreaParm; CCORNER_PARM m_CornerParm; CDIMENSION_PARM m_DimensionParm; CSPLINE_PARM m_SplineParm; CNOTCH_PARM m_NotchParm; std::vector m_vecExtraChipReg; int m_nRCutThresGlass[MAX_DIMENSION_COUNT][2]; int m_nRCutThresChamfer[MAX_DIMENSION_COUNT][2]; }; class CALIGNMARK_PARM { public: CALIGNMARK_PARM(); virtual ~CALIGNMARK_PARM(void); CALIGNMARK_PARM& operator=(CALIGNMARK_PARM& rh); public: BOOL ReadRecipe(CConfig *pFile,int nIdx); BOOL WriteRecipe(CConfig *pFile,int nIdx); public: void Reset(); void MarkImgDelete(); public: BOOL m_bIsMark[MAX_MARKER_COUNT]; // 是否存在标志? int m_nMarkType[MAX_MARKER_COUNT]; double m_dMarkMatchingRate[MAX_MARKER_COUNT][MAX_POS_MARKER_COUNT]; JUDGEEDGE m_JudgeAlign; IplImage *IpMarkImg[MAX_MARKER_COUNT][MAX_POS_MARKER_COUNT]; }; enum EM_INS_TYPE{EM_INS_EDGE=0,EM_INS_CORNER,EM_INS_DIMENSION,EM_INS_SPLINE,EM_INS_NOTCH,EM_INS_SPLINE_POINT_JUDGE}; // Hole Inspsect Parameter struct HOLE_INS_PARM { int m_nSideIdx; CRect m_rtArea; CRect m_rtHoleArea; int m_nThreshold; int m_nOffset; int m_nMinSize; double m_dMatRate; CString m_strTemplatePath; }; class CHOLEINSPECT_PARM { public: CHOLEINSPECT_PARM() {Reset();}; virtual ~CHOLEINSPECT_PARM(void) {Reset();}; CHOLEINSPECT_PARM& operator=(CHOLEINSPECT_PARM& rh); public: BOOL ReadRecipe(CConfig *pFile); BOOL WriteRecipe(CConfig *pFile); public: void Reset(); public: int m_nTotalHoleCount; vector m_vecHoleInsParam; }; // End of Hole Inspsect Parameter typedef struct tagProfileSetting { double x; double y; double radius; double plus; double minus; BOOL use; tagProfileSetting(void) { x = 0.0; y = 0.0; radius = 0.0; plus = 50.0; minus = 50.0; use = TRUE; } }ST_PROFILE_SETTING; typedef struct tagChamferSetting { double reference; double plus; double minus; BOOL use; tagChamferSetting(void) { reference = 100.0; plus = 50.0; minus = 50.0; use = TRUE; } }ST_CHAMFER_SETTING; class CProfileInspect_Prm { public: CProfileInspect_Prm() {Reset();}; virtual ~CProfileInspect_Prm(void) {Reset();}; CProfileInspect_Prm& operator=(CProfileInspect_Prm& rh); public: BOOL ReadRecipe(CConfig *pFile); BOOL WriteRecipe(CConfig *pFile); public: void Reset(); public: BOOL m_bUseOriginAlignKey[MAX_DIMENSION_COUNT]; int m_nOriginAlignKeyOffsetX[MAX_DIMENSION_COUNT]; int m_nOriginAlignKeyOffsetY[MAX_DIMENSION_COUNT]; int m_nOriginAlignKeyOffsetDwX[MAX_DIMENSION_COUNT]; int m_nOriginAlignKeyOffsetDwY[MAX_DIMENSION_COUNT]; int m_nCADOffsetX[MAX_DIMENSION_COUNT]; int m_nCADOffsetY[MAX_DIMENSION_COUNT]; ST_PROFILE_SETTING m_stProfile[MAX_PROFILE_SETTING_COUNT]; ST_CHAMFER_SETTING m_stCamferUp[MAX_PROFILE_SETTING_COUNT]; ST_CHAMFER_SETTING m_stCamferDn[MAX_PROFILE_SETTING_COUNT]; double m_dConvResolution[MAX_DIMENSION_COUNT][MAX_STAGE_HAND_COUNT]; double m_dScanResolution[MAX_DIMENSION_COUNT][MAX_STAGE_HAND_COUNT]; }; class CGlassRecipe { public: CGlassRecipe(void); virtual ~CGlassRecipe(void); CGlassRecipe& operator=(CGlassRecipe& rh); public: BOOL ReadRecipe(CConfig *pFile); BOOL WriteRecipe(CConfig *pFile); BOOL WriteRecipeFile(); BOOL WriteRecipeFileBackUp(); BOOL MakeRecipeFileName(CString strRecipe); BOOL MakeRecipeFileNameBackUp(CString strRecipe); BOOL ReadRecipeFile(); int GetLightValue(int iCon,int iCh); CINSPECT_INFO_PARM *GetInspectInfo(){return &m_InspectInfoParm;} CALIGNMARK_PARM *GetAlignMarkPrm(DimensionDir eDim); BOOL LoadAlignMark(); BOOL SaveAlignMark(); pSTU_CUTAREA_PARM GetCutAreaPrm(DimensionDir eDim); CCORNER_PARM *GetCornerParm(){return m_InspectInfoParm.GetCornerParm();} CETC_PARM *GetEtcPrm(DimensionDir eDim); CINSPECT_JUDGEMENT_PARM *GetJudgePrm(){return &m_Judgement;} USER_DEFECT_AREA_LIST *GetUserDefectList(DimensionDir eDim){return &m_UserDefectPrm[eDim];} EXCEPTION_AREA_LIST *GetExpAreaList(DimensionDir eDim){return &m_ExpAreaPrm[eDim];} CHOLEINSPECT_PARM *GetHolePrm(){return &m_HoleInspectParm;} CDIMENSION_PARM *GetDimensionParm(){return m_InspectInfoParm.GetDimensionParm();} CProfileInspect_Prm *GetProfileParm(){return &m_ProfilePrm;} CGLASS_INFO_PARM *GetGlassInfo(){return &m_GlassParm;} CString GetRecipeName(); void Reset(); BOOL Save_Image(CString strPath,IplImage *IpImg); BOOL Load_Image(CString strPath,IplImage **pIpImg); BOOL LoadUserDefectList(); BOOL SaveUserDefectList(); BOOL LoadExpAreaList(); BOOL SaveExpAreaList(); void DeleteExpAreaList(); public: CRECIPE_INFO_PARM m_RecieParm; CGLASS_INFO_PARM m_GlassParm; CETC_PARM m_ETCParm[MAX_DIMENSION_COUNT]; CLIGHT_PARM m_LightParm; CALIGNMARK_PARM m_AlignMarkParm[MAX_DIMENSION_COUNT]; USER_DEFECT_AREA_LIST m_UserDefectPrm[MAX_DIMENSION_COUNT]; EXCEPTION_AREA_LIST m_ExpAreaPrm[MAX_DIMENSION_COUNT]; CINSPECT_INFO_PARM m_InspectInfoParm; CINSPECT_JUDGEMENT_PARM m_Judgement; CHOLEINSPECT_PARM m_HoleInspectParm; CProfileInspect_Prm m_ProfilePrm; protected: CConfig m_RecipeFile; };