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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
// Glass.h: interface for the CGlass class.
//
//////////////////////////////////////////////////////////////////////
 
#pragma once
 
#include <vector>
#include "DefectStorage.h"
#include "GlassRecipe.h"
#include "HardwareSettings.h"
#include "InspectDefect.h"
 
typedef struct _JUDGE_CUTAREA
{
    int                    nScanIdx;    
    double                dThick;
    double                dyCoordi;
    CAMERA_DIR            enCamDir;
    DimensionDir        enDir;
 
    _JUDGE_CUTAREA()
    {
        Reset();
    }
    void Reset()
    {
        nScanIdx = 0;        
        dThick = dyCoordi = 0.;
        enCamDir = CAMDIR_NONE;
    }
} JUDGE_CUTAREA, *pJUDGE_CUTAREA;
 
typedef struct _JUDGE_SPLINE
{
    int            iType;
    int            nDetRange;
    BOOL        bUp;
    double        dAvg;
    double        dMax;
    double        dRangeVal[5];
 
    _JUDGE_SPLINE()
    {
        Reset();
    }
    void Reset()
    {
        iType = -1;
        nDetRange = 0;
        bUp = TRUE;
        dAvg = dMax = 0;
        ZeroMemory(dRangeVal,sizeof(double)*5);
    }
} JUDGE_SPLINE, *pJUDGE_SPLINE;
 
typedef struct _JUDGE_NOTCH
{
    CAMERA_DIR        Camdir;
    DimensionDir    enDir;
    double        dAvg;
    double        dMax;
    int            nDetRange;
    double        dRangeVal[5];
    double        dAvgThick;
    BOOL        bAvgThick;
    int            nNotchDx;
    int            nNotchDy;
 
    _JUDGE_NOTCH()
    {
        Reset();
    }
    void Reset()
    {
        Camdir = CAMDIR_NONE;
        enDir = DIMENSION_NONE;
        nDetRange = 0;
        dAvg = dMax = dAvgThick = 0;
        ZeroMemory(dRangeVal,sizeof(double)*5);
        bAvgThick = FALSE;
        nNotchDx = nNotchDy = 0;
    }
} JUDGE_NOTCH, *pJUDGE_NOTCH;
 
typedef struct _JUDGE_DIMENSION
{    
    CAMERA_DIR            Camdir;
    DimensionDir        enDir;
    double                dSize;
    double                dXPos,dYPos;
 
    _JUDGE_DIMENSION()
    {
        Reset();
    }
    void Reset()
    {
        Camdir = CAMDIR_NONE;
        enDir = DIMENSION_NONE;
        dSize = dXPos = dYPos = 0.;
    }
} JUDGE_DIMENSION, *pJUDGE_DIMENSION;
 
typedef struct _INS_PROFILE_RESULT_INFO
{        
    short                    nProfileData[MAX_PROFILE_SETTING_COUNT];
    short                    nChamferUp[MAX_PROFILE_SETTING_COUNT];
    short                    nChamferDn[MAX_PROFILE_SETTING_COUNT];
    
 
    _INS_PROFILE_RESULT_INFO()
    {
        Reset();
    }
    void Reset()
    {        
        ZeroMemory(nProfileData,sizeof(short)*MAX_PROFILE_SETTING_COUNT);
        ZeroMemory(nChamferUp,sizeof(short)*MAX_PROFILE_SETTING_COUNT);
        ZeroMemory(nChamferDn,sizeof(short)*MAX_PROFILE_SETTING_COUNT);
 
    }
} INS_PROFILE_RESULT_INFO, *pINS_PROFILE_RESULT_INFO;
 
typedef struct _CHAMFER_RESULT
{        
    int                iIndex;
    int                iCam;
    int                iScan;
    int                iSide;
    int                iFrame;
    int                nUp;
    BOOL            bChamferJudge;    
    int                nGlassLeft;
    int                nGlassRight;
    int                nChamferThick;        
    int                nChamferCalThick;
    BOOL            bUseJudge;
    int                nJudgeReference;
    int                nJudgePlusChamfer;
    int                nJudgeMinusChamfer;    
    CvPoint2D32f    ptFull;
    CvPoint2D32f    ptChamferLine;
    CvPoint2D32f    ptCADLine;
    CvPoint2D32f    ptGlassLine;
 
    _CHAMFER_RESULT()
    {
        Reset();
    }
    void Reset()
    {        
        iIndex = iCam = iScan = iSide = iFrame = nUp = 0;
        bChamferJudge = TRUE;        
        nGlassLeft = nGlassRight = nChamferThick = nChamferCalThick = 0;    
        bUseJudge = TRUE;
        nJudgeReference = nJudgePlusChamfer = nJudgeMinusChamfer = 0;
        ptChamferLine.x = ptChamferLine.y = ptCADLine.x = ptCADLine.y = 0;    
        ptFull.x = ptFull.y = 0;
        ptGlassLine.x = ptGlassLine.y= 0;    
    }
} CHAMFER_RESULT, *pCHAMFER_RESULT;
 
typedef struct _PROFILE_RESULT
{    
    int                iIndex;
    int                iCam;
    int                iScan;
    int                iSide;
    int                iFrame;
    BOOL            bProfileJudge;
    int                nProfileDiff;
    BOOL            bUseJudge;    
    int                nJudgePlus;
    int                nJudgeMinus;    
    CvPoint2D32f            ptFullImg;
    CvPoint2D32f            ptGlassLine;
    CvPoint2D32f            ptGlassAlign;
    CvPoint2D32f            ptGlassStart;        
 
    _PROFILE_RESULT()
    {
        Reset();
    }
    void Reset()
    {        
        bProfileJudge = TRUE;
        bUseJudge = TRUE;
        iIndex = iCam = iScan = iSide = iFrame = 0;
        nProfileDiff = 0;
        nJudgePlus = nJudgeMinus = 0;
        ptFullImg.x = ptFullImg.y = ptGlassLine.x = ptGlassLine.y = 0;    
        ptGlassAlign.x = ptGlassAlign.y = ptGlassStart.x = ptGlassStart.y = 0;                    
    }
} PROFILE_RESULT, *pPROFILE_RESULT;
 
typedef struct _PROFILE_RCUT_PROCESSDATA
{    
    int                iIndex;
    int                iCam;
    int                iScan;
    int                iSide;
    int                iFrame;
    double            dCenterX;
    double            dCenterY;
    double            dCADLineX;
    double            dCADLineY;
    double            dRadius;
    double            dPixelRadius;
    CvPoint2D32f            ptGlass;
    CvPoint2D32f            ptChamfer;
 
 
    _PROFILE_RCUT_PROCESSDATA()
    {
        Reset();
    }
    void Reset()
    {            
        iIndex = iCam = iScan = iSide = iFrame = 0;
        dCenterX = dCenterY = dCADLineX = dCADLineY = dRadius = dPixelRadius = 0;
        ptGlass.x = ptGlass.y = ptChamfer.x = ptChamfer.y = 0;        
        
    }
} PROFILE_RCUT_PROCESSDATA, *pPROFILE_RCUT_PROCESSDATA;
 
typedef struct _PROFILECHAMFER_RESULT_DATA
{        
    PROFILE_RESULT                ProfileData[MAX_PROFILE_SETTING_COUNT];
    CHAMFER_RESULT                ResultChamfer[MAX_PROFILE_SETTING_COUNT][2];
    PROFILE_RCUT_PROCESSDATA    RCutProcessData[MAX_PROFILE_SETTING_COUNT];
 
    _PROFILECHAMFER_RESULT_DATA()
    {
        Reset();
    }
    void Reset()
    {        
        ZeroMemory(ProfileData,sizeof(PROFILE_RESULT)*MAX_PROFILE_SETTING_COUNT);    
        ZeroMemory(RCutProcessData,sizeof(PROFILE_RCUT_PROCESSDATA)*MAX_PROFILE_SETTING_COUNT);
        ZeroMemory(ResultChamfer,sizeof(CHAMFER_RESULT)*MAX_PROFILE_SETTING_COUNT*2);
    }
} PROFILECHAMFER_RESULT_DATA, *pPROFILECHAMFER_RESULT_DATA;
 
typedef struct _INS_EDGE_RESULT_INFO
{    
    int                        nGlassEdgeXPos[2];                // Glass X pos
    int                        nGlassStartLine;                        // CELL ½ÃÀÛ
    int                        nGlassStartFrame;
    int                        nGlassEndLine;                        // CELL ³¡
    int                        nGlassEndFrame;
    int                        nPreGlassEndLine;                        // CELL ³¡
    int                        nPreGlassEndFrame;
 
    BOOL                    bSpline[2];
    BOOL                    bMark[MAX_MARKER_COUNT];                    // ¸¶Å© Ã£±â ¼º°ø¿©ºÎ
    CvPoint2D32f            ptMark[MAX_MARKER_COUNT];                    // ¸¶Å© À§Ä¡
    CRect                    rtMark[MAX_MARKER_COUNT];                    // ¸¶Å© Ã£´Â À§Ä¡
 
    CRect                    rtChamfer;
 
    short                    nCompRefFrame[MAX_IMAGE_FRAME];
    short                    nGrindframe[3][MAX_IMAGE_FRAME];            // ¿¬¸¶ LINE
    short                    nGrindData[MAX_IMAGE_FRAME];                // ½ÇÁ¦ ¿¬¸¶·®    
    int                        nMarkToEdge_X[MAX_MARKER_COUNT];    
    int                        nMarkToEdge_Y[MAX_MARKER_COUNT];    
    CRect                    rcCorner[MAX_MARKER_COUNT];        
 
    _INS_EDGE_RESULT_INFO()
    {
        Reset();
    }
    void Reset()
    {
        ZeroMemory(bSpline,sizeof(BOOL)*2);
        ZeroMemory(bMark,sizeof(BOOL)*MAX_MARKER_COUNT);
        ZeroMemory(ptMark,sizeof(CvPoint2D32f)*MAX_MARKER_COUNT);
        ZeroMemory(rtMark,sizeof(CRect)*MAX_MARKER_COUNT);
        nGlassStartLine = nGlassEndLine = nPreGlassEndLine = nPreGlassEndFrame = nGlassEndFrame = nGlassStartFrame = -1;
        ZeroMemory(nCompRefFrame,sizeof(short)*MAX_IMAGE_FRAME);
        ZeroMemory(nGrindframe,sizeof(short)*MAX_IMAGE_FRAME*3);
        ZeroMemory(nGrindData,sizeof(short)*MAX_IMAGE_FRAME);
        ZeroMemory(rcCorner,sizeof(CRect)*MAX_MARKER_COUNT);
        ZeroMemory(nMarkToEdge_X,sizeof(int)*MAX_MARKER_COUNT);
        ZeroMemory(nMarkToEdge_Y,sizeof(int)*MAX_MARKER_COUNT);    
        ZeroMemory(nGlassEdgeXPos,sizeof(nGlassEdgeXPos));    
        rtChamfer = CRect(0,0,0,0);        
    }
} INS_EDGE_RESULT_INFO, *pINS_EDGE_RESULT_INFO;
 
class CGlass_Data
{
public:    
    CGlass_Data(void);
    virtual ~CGlass_Data();
 
    void                    ResetGlass();    
    void                    ResetDefect();
    BOOL                    SetDefect(CInspectDefect* pDefect);
    CInspectDefect*            GetDefect(int nDefecIdx);
    MapDefect*                GetMapDefect()            { return &m_MapDefect; }
    int                        GetTotalDefectCount()    { return m_nCurDefectIdx;}
    int                        GetJudgeDefectCount() { return m_nJudgeDefectCount;}
    
    //////////////////////////////////////////////////////////////////////////
    // Glass Data
    BOOL                    SetHardwareRecipe(CHardwareSettings *pHardware){m_pHardwareSetting = pHardware;}    
    void                    SetGlassRecipe(CGlassRecipe *pRecipe){m_pGlassRecipe=pRecipe;}
    CGlassRecipe*            GetGlassRecipe()        { return m_pGlassRecipe; }
    CHardwareSettings*        GetHardwareRecipe()        { return m_pHardwareSetting;}
    CINSPECT_INFO_PARM*        GetInsRecipe()            { return &GetGlassRecipe()->m_InspectInfoParm;}
 
    BOOL                    GetInsUseCheck(EM_INS_TYPE emIns);    
 
    void                    SetLoadingTime();
    void                    SetUnloadingTime();
    void                    SetScanStartTime();
    void                    SetScanEndTime();    
    CString                    GetLoadingTime()        { return m_strLoadingTime; }
    CString                    GetUnloadingTime()        { return m_strUnloadingTime; }
    CString                    GetScanStartTime()        { return m_strScanStartTime; }
    CString                    GetScanEndTime()        { return m_strScanEndTime; }        
    CString                    GetScanEndTimeFileName(){ return m_strScanEndTimeFileName; }        
    CString                    GetLoadingTimeFileName(){ return m_strLoadingTimeFileName; }        
    CString                    GetLoadingDayFileName(){ return m_strLoadingDayFileName; }
    
    INS_EDGE_RESULT_INFO    *GetEdgeResultInfo(DimensionDir eDim){return &m_EdgeResultInfo[eDim];}
    INS_PROFILE_RESULT_INFO    *GetProfileResultInfo(){return &m_stProfileResult;}
    short                    *GetGlassResultInfo(){return m_nGlassResult;}
    PROFILECHAMFER_RESULT_DATA    *GetProfileInspectData(){return &m_ProfileInspectData;}    
    void                    SetProfileChamferInspectData(int nIndex,int nUp,CHAMFER_RESULT *pChamferResult);
    void                    SetProfileInspectData(int nIndex,PROFILE_RESULT *pProfileResult);
    void                    SetRCutProfileInspectData(int nIndex,PROFILE_RCUT_PROCESSDATA *pProfileResult);
    BOOL                    GetProfileInspectIndex(int iSide,int &nIndex,int &nSize,CString &str);
    BOOL                    GetProfileRCutInspectIndex(int iSide,int &nIndex,int &nSize,CString &str);
 
    void                    GetStageTheta(int iStage,short &nLongTheta,short &nShortTheta);
    void                    SetStageTheta(int iStage,BOOL bLong,short nTheta);
 
    BOOL                    IsPostProcStart()        {return m_bPostProcessing;}
    void                    SetPostProc(BOOL bSet)    {m_bPostProcessing = bSet;}
 
    void                    SetScanStart(BOOL bStart);
    BOOL                    GetScanStart(){return m_bScanStart;}
    void                    SetScanEnd(int nScanIdx,BOOL bIsEnd);
    BOOL                    GetScanEnd(int nScanIdx);
    void                    SetScanStartCount(int nCount){m_nStartCount=nCount;}
    int                        GetScanStartCount(){return m_nStartCount;}    
    int                        GetScanEndCameraCount();
    void                    SetScanEndCamera(int iCam,int iScan);
 
protected:
    //////////////////////////////////////////////////////////////////////////
    CGlassRecipe            *m_pGlassRecipe;            // Glass Recipe
    CHardwareSettings        *m_pHardwareSetting;        // Hardware Setting
    MapDefect                m_MapDefect;            // °áÇÔÁ¤º¸
    int                        m_nCurDefectIdx;
    int                        m_nJudgeDefectCount;
    CRITICAL_SECTION        m_csGlassDefect;            
    
    CString                    m_strLoadingTime;
    CString                    m_strUnloadingTime;
    CString                    m_strScanStartTime;
    CString                    m_strScanEndTime;        
    //park
    CString                    m_strScanEndTimeFileName;
    CString                    m_strGlassResult;
    CString                    m_strLoadingTimeFileName;
    CString                    m_strLoadingDayFileName;
 
    // Stage theta º¸Á¤
    short                    m_nStageLongTheta[2];
    short                    m_nStageShortTheta[2];    
        
    INS_EDGE_RESULT_INFO    m_EdgeResultInfo[MAX_DIMENSION_COUNT];
    INS_PROFILE_RESULT_INFO    m_stProfileResult;
    short                    m_nGlassResult[11];
    PROFILECHAMFER_RESULT_DATA    m_ProfileInspectData;
    
    BOOL                    m_bScanEndCamera[MAX_CAMERA_COUNT][MAX_SCAN_COUNT];
    BOOL                    m_bScanStart;
    BOOL                    m_bScanEnd[MAX_SCAN_COUNT];
    BOOL                    m_bPostProcessing;
    CCriticalSection        m_csProfileData;
    int                        m_nStartCount;    
    CCriticalSection        m_csInsEnd;    
 
public:
    // Side
    BOOL                    m_bOnly_Profile_NG;
    int                        m_nSide_Profile_NG_Count[MAX_DIMENSION_COUNT];
    int                        m_nSide_Profile_NG_Max_Diff[MAX_DIMENSION_COUNT];
};