mrDarker
2025-07-14 1c0ac1c7924efb8a2cb6962d3eda4126533a5ac8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#pragma once
 
#include "Global_Define.h"
#include "GlassRecipe.h"
 
#define        DEFECTIMAGE_WIDTH        1024
#define        DEFECTIMAGE_HEIGHT        500
 
enum DefectLocation        { DefectLoc_Crack, DefectLoc_Broken, DefectLoc_Chip, DefectLoc_Chamfer, DefectLoc_Burr, DefectLoc_Thin, DefectLoc_Air, DefectLoc_Notch, DefectLoc_Hole, DefectLoc_Profile, DefectLoc_KDist, DefectLoc_RCUTChip };
enum SplineLocation        { Spline_BotRight=0,Spline_BotLeft,Spline_TopRight,Spline_TopLeft,Spline_None };
 
class CBlobStorage;
class CSISBuffer;
class CConvParam;
class CAssemControl;
class CGrabberControl;
class CGlass_Data;
class CHardwareSettings;
 
class CDefect  
{
public:    
    int                m_nIndex;
    int                m_iFrameIdx;
    int                m_nCamID;
    int                m_nScanIdx;    
    int                m_nGlassStartLine;
    SplineLocation    m_nSplineLoc;
    CDefectBlob        m_Defect;
    DefectLocation    m_DefectLoc;        
    int                m_nSideLoc;
    int                m_nCamDir;
    BYTE            m_Image[DEFECTIMAGE_WIDTH * DEFECTIMAGE_HEIGHT + 1];
    BOOL            m_bRemoved;
    BOOL            m_bThinCrackDefect;
    int                m_nReduceSize;
    int                m_nProfileIndex;
 
    CDefect()
    {
        Reset();
    }
    virtual ~CDefect()
    {
 
    }
    void Reset()
    {        
        m_nProfileIndex        = -1;
        m_bThinCrackDefect    = FALSE;
        m_bRemoved            = FALSE;
        m_nIndex            = -1;
        m_nScanIdx            = -1;        
        m_nGlassStartLine    = -1;
        m_nCamID            = -1;
        m_nSplineLoc        = Spline_None;
        m_Defect.Reset();
        m_DefectLoc            = DefectLoc_Crack;        
        m_nReduceSize        = 0;
        m_nSideLoc            = 0;
        m_nCamDir            = -1;
        ZeroMemory(m_Image, DEFECTIMAGE_WIDTH * DEFECTIMAGE_HEIGHT + 1);        
    }
};
 
class CDefectStorage
{
protected:
    CCriticalSection    m_csDefect;
 
protected:
    int                m_nDefect;
    CDefect            *m_pDefect;
 
    int                m_maxDefect;
    int                m_nDefectSpace;
 
public:
    int        InitDefectStorage(int maxDefect= 1000);
    int        IncreaseDefectCount(){++m_nDefect; return m_nDefect;}
    void    ResetDefectStorage()    ;
    int        GetDefectCount() {return m_nDefect;}
    CDefect* GetDefect(int i= 0){return m_pDefect+ i;}
 
public:
    CDefectStorage(void);
    virtual ~CDefectStorage(void);
 
    void    CheckDefectRect(CPoint* pVertex, CRect* pRect, int nX, int nY);
 
    int        StopInspection(CAssemControl *pAssemControl);
    void    SetBlobDefect(int i);
};
 
class CDefectControl : public CDefectStorage
{
public:// Defect Àü¼ÛºÎ Ãß°¡.
    CDefectControl();
    virtual ~CDefectControl();
    
    void        SetGrabber(CGrabberControl *pGrabber){m_pGrabber=pGrabber;}
    void        SetGlassData(CGlass_Data *pGlassData){m_pGlassData=pGlassData;}
    void        SetHWRecipe(CHardwareSettings *pHW){m_pHWRecipe=pHW;}
    int            ExtractDefect_SpNew(DimensionDir emDim,int iCam,int iScan,DefectLocation eDefect,CvPoint2D32f  ptDefect,int nSplineType,BOOL bFlip,int nDefectArea);
    int            ExtractDefect_Chip(DimensionDir emDim,int iCam,int iScan,CChipBlob *pCBlob,int nDefect,DefectLocation eDefect,int iFrameV);
    int            ExtractDefect_SplineChip(DimensionDir emDim,int iCam,int iScan,CChipBlob *pBlobStorage,int nDefectCnt,DefectLocation nDefectLoc,CPoint basePos,int nSplineType,BOOL bFlip,int nChipW,int nChipH,EM_CHIPPING_COMP eComp);        
    int            ExtractDefect_NotchChip(DimensionDir emDim,int iCam,int iScan,CChipBlob *pBlobStorage,int nDefectCount,DefectLocation nDefectLoc,CRect rectIns);
    int            ExtractDefect_Hole(DimensionDir emDim,int iCam,int iScan,std::vector<CRect> &vecList,int nDefectCount,DefectLocation nDefectLoc,CRect rectIns);
    int            ExtractDefect_ProfileChamfer(DimensionDir emDim,int iCam,int iScan,DefectLocation nDefectLoc,CvPoint2D32f  ptDefect,int nProfileIndex);
    int         ExtractDefect_KDist(DimensionDir emDim, int iCam, int iScan, DefectLocation eDefect, CvPoint2D32f  ptDefect, CRect rectDefect, int nProfileIndex); //2024.6.12
 
    void        ResetDefectControl();        
    int            CheckDefectCount();    
    int            IncreaseDefectCount(){++m_nDefect; return m_nDefect;}
 
protected:
    void        CopyChipToBlob(CChipBlob *pChip,CDefectBlob *pBlob);    
 
protected:
    CGrabberControl    *m_pGrabber;
    CGlass_Data            *m_pGlassData;
    CHardwareSettings    *m_pHWRecipe;
 
};