LWQ
2025-07-14 52d230fd0eb38adc5c6f4c6d6ed3786a3c19354d
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
#ifndef GLOBAL_DEFINE_H
#define GLOBAL_DEFINE_H
 
#include <map>
#include <list>
#include <vector>
#include <functional>
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    MAX_CAMERA_COUNT            4
#define MAX_SCAN_COUNT                2
#define MAX_DIMENSION_COUNT            8
#define MAX_STAGE_HAND_COUNT        2
#define MAX_FRAM_COUNT                200
 
#define MAX_DEFECT_COUNT_SIDE        2000
#define MAX_DEFECT_COUNT_GLASS        16000    // MAX_DEFECT_COUNT_SIDE * MAX_DIMENSION_COUNT
#define    DISPLAY_FRAME_WIDTH            4096
#define DISPLAY_FRAME_HEIGHT        1024
 
#define SHARD_MEMORY_STRING_FRAMEBUFFER _T("SHARD_MEMORY_FRAMEBUFFER")
 
#define    PATH_INSPECTOR                _T("C:\\EdgeInspector_App")
#define RECIPE_PATH                    _T("C:\\EdgeInspector_App\\Recipe")
#define RECIPE_ALIGN_PATH            _T("C:\\EdgeInspector_App\\Align")
#define    LINK_FILE_NAME                _T("C:\\EdgeInspector_App\\Recipe\\PPIDLink.lst")
#define GLASSTYPE_IMAGE_PATH        _T("C:\\EdgeInspector_App\\Recipe\\GlassType")
#define LANGUAGE_DIR_PATH            _T("C:\\EdgeInspector_App\\Language")
 
#define PATH_LOGIMAGE                _T("D:\\Inspection\\Image\\Log\\")
#define PATH_DEBUGFULLIMAGE            _T("D:\\Inspection\\Image\\Log\\DebugFullImage\\")
 
#define PATH_INSPECTION_DATA        _T("D:\\Inspection\\Data")// _T("D:\\InspectionData\\")
 
#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_SIDE_COUNT                            8
#define MAX_CORNER_DIMENSION_MEASURE_COUNT        5
#define MAX_SIDE_DIMENSION_MEASURE_COUNT        16            // ÃÖ´ë Frame ¼ö ¸¸Å­
 
#define MAX_SIDE_EXCEPTION_AREA_COUNT            32
#define MAX_SIDE_USER_DEFECT_AREA_COUNT            32
#define MAX_SIDE_NOTCH_COUNT                    5
#define MAX_SIDE_NOTCH_MEASURE_COUNT            10
#define MAX_SIDE_NOTCH_CIRCLE_COUNT                4
 
/*
#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,SOLIOS_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_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};
};
 
static CString g_SideName[] = 
{
    _T("A Top"),
    _T("B Top"),
    _T("C Top"),
    _T("D Top"),
    _T("A Bot"),
    _T("B Bot"),
    _T("C Bot"),
    _T("D Bot"),
    _T("Unknown")
};
 
static char g_cSideName[9][256] = 
{
    "A Top",
    "B Top",
    "C Top",
    "D Top",
    "A Bot",
    "B Bot",
    "C Bot",
    "D Bot",
    "Unknown"
};
 
static CString g_strDayOfWeek[7] = 
{
    _T("Sun"),
    _T("Mon"),
    _T("Tue"),
    _T("Wed"),
    _T("Thu"),
    _T("Fri"),
    _T("Sat")
};
 
using namespace GLOBAL_DEFINE;
 
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(CDefect* pDefect,int nGlassDefectIdx) = 0;
    virtual CDefect        *ListDefect_ReqDefectImage(CDefect* 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<void(BYTE)> _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 BOOL        IV2M_InspectionProcess(DimensionDir eDim) = 0;
    virtual BOOL        IV2M_InspectionProcessAll(int iProceMode) = 0;
};
 
// 4/13 MiniLED
#define IMAGE_WIDTH                        4096 // 8192//2048
#define IMAGE_HEIGHT                    1024    
#define MAX_IMAGE_FRAME                    160//100
#define MAX_IMAGE_FRAME_SHORT            160//100            // ÃÖ´ë ÇÁ·¹ÀÓ ¼ö 
#define MAX_IMAGE_FRAME_LONG            160//100            // ÃÖ´ë ÇÁ·¹ÀÓ ¼ö
 
#define MAX_SIDE_INSPECT_AREA_COUNT        12
 
#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        ((MAX_IMAGE_FRAME+50) * IMAGE_HEIGHT) //(150 * IMAGE_HEIGHT) // ÃÖ´ë ¶óÀμö 
 
#define ALIGN_4BYTE(width)        (width + 3)/4*4
#define PI                        3.14159265358979323846
#define ToRadian(degree)        ( (degree) * (PI/180.0) )
#define ToDegree(radian)        ( (radian) * (180.0/PI) )
 
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;
};
 
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;
 
// For Recipe Edit..
#define ZOOM_RANGE        20
#define ZOOM_RATIO        (1.0/(((double)ZOOM_RANGE+2.0)/2.0))
 
enum eViewCmdSide        {eRcp_SideRD_A=0, eRcp_SideRD_B, eRcp_SideRD_C, eRcp_SideRD_D,eRcp_SideRD_A_DN,eRcp_SideRD_B_DN,eRcp_SideRD_C_DN,eRcp_SideRD_D_DN,eRcp_SideRD_End};
 
enum eViewCmdInsType    
{
    eRcp_InsType_Chip=0, 
    eRcp_InsType_Crack, 
    eRcp_InsType_Burr, 
    eRcp_InsType_Chamfer, 
    eRcp_InsType_In_Chip,
    eRcp_InsType_In_Crack, 
    eRcp_InsType_In_Burr, 
    eRcp_InsType_In_Chamfer, 
    eRcp_InsType_TopCorner, 
    eRcp_InsType_BotCorner
};
 
static CString g_strInsType[10] = 
{
    _T("Chip"),
    _T("Crack"),
    _T("Burr"),
    _T("Chamfer"),
    _T("In_Chip"),
    _T("In_Crack"),
    _T("In_Burr"),
    _T("In_Chamfer"),
    _T("Top_Corner"),
    _T("Bot_Corner"),
};
 
enum eSideInsType        
{    
    eSideInsType_Chip=0,
    eSideInsType_Crack,
    eSideInsType_Burr,
    eSideInsType_Chamfer,
    eSideInsType_In_Chip,
    eSideInsType_In_Crack,
    eSideInsType_In_Burr,
    eSideInsType_In_Chamfer,
    eSideInsType_Total
};
 
#define MAX_SIDE_INSPECT_TYPE 8
 
struct WSSendData {
    //=======================´ý¶¨==========================
    //uint8_t operation;      // ²Ù×÷·û (1×Ö½Ú)
    //uint8_t operand;        // ²Ù×÷Êý (1×Ö½Ú)
    //uint16_t blockNumber;   // Í¼Ïñ¿é±àºÅ (2×Ö½ÚÎÞ·ûºÅÕûÊý)
    //uint32_t dataOffset;    // Êý¾ÝÆ«ÒÆ (4×Ö½ÚÎÞ·ûºÅÕûÊý)
    //=====================================================
 
    uint8_t nCheckType = 0;       // ¼ì²âÀàÐÍ
    uint8_t nRecipe = 0;          // Åä·½
    uint8_t nLineType = 0;        // Ïß±ðÀàÐÍ
    uint8_t nIndex = 0;           // Í¼Æ¬ÐòºÅ
    uint8_t nFrameIdx = 0;        // Ö¡ÐòºÅ
    uint8_t nScanIdx = 0;         // ²à±ð
    uint8_t nNGType = 0;          // NG ÀàÐÍ
    uint8_t nPosition = 0;        // Î»ÖÃ
    uint8_t    nState = 0;           // ×´Ì¬
    uint16_t nEdgeX = 0;          // X·½Ïò±ßÔµ×ø±ê
    uint16_t nEdgeY = 0;          // X·½Ïò±ßÔµ×ø±ê
    uint16_t nNPointY = 0;        // Y·½ÏòNGÇøÓò×ø±ê
    uint16_t nWidth = 0;          // Í¼Ïñ¿í¶È
    uint16_t nHeight = 0;         // Í¼Ïñ¸ß¶È
    double dTimeStamp = 0.0;      // Ê±¼ä´Á
    uint16_t nLeft = 0;           // ÔÚԭͼµÄλÖÃ
    uint16_t nTop = 0;            // ÔÚԭͼµÄλÖÃ
    std::string strSN = "";       // ÐòÁкÅ
    std::vector<char> image = {}; // Í¼ÏñÊý¾Ý (¶þ½øÖÆÊý¾Ý)
};
 
struct WSReceiveData {
    // ¶¨ÒåÒ»¸ö±íʾNGλÖõĽṹÌå
    struct NGPosition {
        uint8_t nNGType = 0;     // NG ÀàÐÍ
        uint16_t nLeft = 0;      // ÔÚԭͼµÄλÖÃ
        uint16_t nTop = 0;       // ÔÚԭͼµÄλÖÃ
        uint16_t nRight = 0;     // ÔÚԭͼµÄλÖÃ
        uint16_t nBottom = 0;    // ÔÚԭͼµÄλÖÃ
    };
 
    uint8_t nRecipe = 0;         // Åä·½
    uint8_t nLineType = 0;       // Ïß±ðÀàÐÍ
    uint8_t nIndex = 0;          // Í¼Æ¬ÐòºÅ
    uint8_t nFrameIdx = 0;       // Ö¡ÐòºÅ
    uint8_t nScanIdx = 0;        // ²à±ð
    std::string strSN = "";      // ÐòÁкÅ
    double dTimeStamp = 0.0;     // Ê±¼ä´Á
    uint8_t nGNum = 0;           // NG ÊýÁ¿
    std::vector<NGPosition> ngPosArray = {}; // NG Î»ÖÃÊý×é
};
 
#endif // GLOBAL_DEFINE_H