mrDarker
2025-07-16 1dbe46cd9d0f181d08d5a69f72d8548628a13b9d
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
#pragma once
#include <bitset>
#include "Global_Define.h"
#include "cv.h"
#include "GlassRecipe.h"
#include "HardwareSettings.h"
#include "Glass_Data.h"
 
#define VIEWER_PI                3.14159265358979323846
#define VIEWER_ToRadian(degree)    ( (degree) * (VIEWER_PI/180.0) )
#define VIEWER_ToDegree(radian)    ( (radian) * (180.0/VIEWER_PI) )
 
#define WM_AREA_ITEM_SELECT_CHANGE    WM_USER + 0x18
#define WM_AREA_ITEM_MODIFY            WM_USER + 0x19
#define WM_FRAME_IMG_MOUSE_DN        WM_USER + 0x1A
 
#define ID_MODE_USER_SELECT                        (30000 + 0)
#define ID_MODE_VIEW_INSPECT_ALL                (30000 + 1)
#define ID_MODE_VIEW_INSPECT_AREA                (30000 + 2)
#define ID_MODE_VIEW_NOTCH_AREA                    (30000 + 3)
#define ID_MODE_VIEW_NOTCH_MEASURE                (30000 + 4)
#define ID_MODE_VIEW_INSPECT_SIDE_DIMENSION        (30000 + 5)
#define ID_MODE_VIEW_CORNER_AREA                (30000 + 6)
#define ID_MODE_VIEW_MARK_AREA                    (30000 + 7)
#define ID_MODE_VIEW_USER_DEFECT_AREA            (30000 + 8)
#define ID_MODE_VIEW_EXCEPTION_AREA                (30000 + 9)
#define ID_MODE_VIEW_START_END_LINE                (30000 + 10)
 
#define ID_MODE_VIEW_DEFECT_ALL                    (30000 + 11)
#define ID_MODE_VIEW_DEFECT                        (30000 + 12)
#define ID_MODE_VIEW_MEASURE                    (30000 + 13)
#define ID_MODE_MODIFY_BRUSH_BLACK                (30000 + 14)
#define ID_MODE_MODIFY_BRUSH_WHITE                (30000 + 15)
 
#define ID_MODE_VIEW_FRAME_INDEX                (30000 + 16)
 
enum eModeEdgeImageViewer
{
    MODE_USER_SELECT,
    MODE_VIEW_INSPECT_AREA,
    MODE_VIEW_NOTCH_AREA,
    MODE_VIEW_NOTCH_MEASURE,
    MODE_VIEW_INSPECT_SIDE_DIMENSION,
    MODE_VIEW_CORNER_AREA,
    MODE_VIEW_MARK_AREA,
    MODE_VIEW_USER_DEFECT_AREA,
    MODE_VIEW_EXCEPTION_AREA,
    MODE_VIEW_START_END_LINE,
    MODE_VIEW_DEFECT,
    MODE_VIEW_MEASURE,
    MODE_MODIFY_BRUSH_BLACK,
    MODE_MODIFY_BRUSH_WHITE,
    MODE_VIEW_FRAME_IDX,
    MAX_DISPLAY_SET,
};
 
typedef struct stEdgeViewer_ManualMeasure
{
    BOOL        bStart;
    BOOL        bModifyStart;
    BOOL        bModifyEnd;
    int            nTextPos;
    CPoint        ptMeasureStart;
    CPoint        ptMeasureEnd;
 
}EdgeViewer_ManualMeasure;
 
class CEdgeImageViewer : public CWnd
{
    DECLARE_DYNAMIC(CEdgeImageViewer)
 
public:
    CEdgeImageViewer();
    virtual ~CEdgeImageViewer();
 
protected:
    afx_msg void OnPaint();
    afx_msg void OnDestroy();
    afx_msg int  OnCreate(LPCREATESTRUCT lpCreateStruct);
    afx_msg void OnContextMenu(CPoint point);
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
 
    afx_msg void OnUserSelect();
    afx_msg void OnViewInspetAll();
    afx_msg void OnViewInspectArea();
    afx_msg void OnViewInspectNotchArea();
    afx_msg void OnViewInspectNotchMeasure();
    afx_msg void OnViewInspectSideDimension();
    afx_msg void OnViewCornerArea();
    afx_msg void OnViewMarkArea();
    afx_msg void OnViewUserDefectArea();
    afx_msg void OnViewExceptionArea();
    afx_msg void OnViewStartEndLine();
    afx_msg void OnViewResultAll();
    afx_msg void OnViewDefect();
    afx_msg void OnViewMeasur();
    afx_msg void OnModifyDrawbrushBlack();
    afx_msg void OnModifyDrawbrushWhite();
    afx_msg void OnViewFrameIdx();
 
    DECLARE_MESSAGE_MAP()
 
public:
    void SetImageBuffer(BYTE *pImg, int nWidth, int nHeight, int nFrameCount);
    void SetImageBuffer(BYTE *pImg);
 
private:
    void InitBitMap();
    void DeleteBitMap();
 
private:
    void UpdateView();
    void UpdateView_Image(CDC* memDC);
    void UpdateView_SideName(CDC* memDC);
    void UpdateView_MousePosInfo(CDC* memDC);
 
    void UpdateView_InspectArea(CDC* memDC);
    void UpdateView_NotchArea(CDC* memDC);
    void UpdateView_NotchMeasure(CDC* memDC);
    void UpdateView_Notch_Circle_Measure(CDC* memDC);
    void UpdateView_Corner(CDC* memDC);
    void UpdateView_Mark(CDC* memDC);
    void UpdateView_UserDefectArea(CDC* memDC);
    void UpdateView_ExceptionArea(CDC* memDC);
    void UpdateView_StartEndLine(CDC* memDC);
    void UpdateView_Defect(CDC* memDC);
    void UpdateView_ManualMeasure(CDC* memDC);
    void UpdateView_MeasureSideDimensionResult(CDC* memDC);
    void UpdateView_Frame(CDC* memDC);
    void UpdateView_MousePoint(CDC* memDC);
 
public:
    CRect    GetManualMeasureRect();
 
public:     // Display
    void    SetDisplayPos(CPoint ptDisplayStart_pxl);
    CPoint    GetDisplayPos()                                        {return m_ptDisplayStart_pxl;}
    void    SetZoom(double dZoom);
    double    GetZoom();
    void    SetWndRect(CRect rtWnd)                                {m_rtWnd = rtWnd;}
    CRect    GetWndRect()                                        {return m_rtWnd;}
 
public:
    void    SetViewOption(eModeEdgeImageViewer emOption);
    void    ResetViewOption(eModeEdgeImageViewer emOption);
 
private: // Mouse Command
    void    ModifyImageBack();
    void    ModifyImageWhite();
 
 
private: // Wnd <-> Pxl
    int        GetWndPosX(int nX_pxl);
    int        GetWndPosY(int nY_pxl);
    CPoint    GetWndPos(CPoint ptPxl);
    CRect    GetWndPos(CRect rtPxl);
 
    int        GetPixlPosX(int nX_Wnd);
    int        GetPixlPosY(int nY_Wnd);
    CPoint    GetPxlPos(CPoint ptWnd);
    CRect    GetPxlPos(CRect rtWnd);
 
public:
    void    SetSideIdx(int nSideIdx)                             {m_nSideIdx = nSideIdx;}
    void    SetGlassData(CGlass_Data* pGlassData)                 {m_pGlassData = pGlassData;}
    void    SetHardwareSetting(CHardwareSettings* pHWSetting)     {m_pHardware = pHWSetting;}
    void    SetRecipe(CGlassRecipe* pRecipe)                     {m_pRecipe = pRecipe;}
    void    SetPixelSize(double dPixelSizeX, double dPixelSizeY) {m_dPixelSizeX = dPixelSizeX, m_dPixelSizeY = dPixelSizeY;}
 
private:
    CRect                        m_rtWnd;
    BITMAPINFO*                    m_pBmInfo;
    BYTE*                        m_pBuffer;
    int                            m_nFrameWidth;
    int                            m_nFrameHeight;
    int                            m_nFrameCount;
    int                            m_nTotalHeight;
    double                        m_dPixelSizeX;                // Resolution X
    double                        m_dPixelSizeY;                // Resolution Y
 
    double                        m_dZoom;
    bitset<MAX_DISPLAY_SET>        m_MenuStatus;                // 拳搁 葛靛 惑怕
    EdgeViewer_ManualMeasure    m_ManualMeasureStatus;        // 荐悼 螟沥 惑怕
    
    CPoint                        m_ptDisplayStart_pxl;        // View狼 0,0 狼 Pxl 困摹
    CPoint                        m_ptMousePos_Wnd;            // Wnd狼 付快胶 困摹
    CPoint                        m_ptMousePos_Pxl;            // Pixel狼 付快胶 困摹
 
 
public:
    int                            m_nSideIdx;                    // Side Idx
    CGlass_Data    *                m_pGlassData;
    CHardwareSettings*            m_pHardware;
    CGlassRecipe*                m_pRecipe;
 
 
    
    /*
    BOOL                    m_bModify;
    BOOL                    m_bMouseLDown;
    BOOL                    m_bVCRDraw;
    BYTE*                    m_pBuffer;
    CSize                    m_szTotBuffer;
            
    double                    m_dZoom;
    int                        m_nModeTracker;
    CPoint                    m_ptOldMouse;
    int                        m_nCam;
    int                        m_nSide;    
    SIZE                    m_szImg;
    SIZE                    m_szMark;
    MANUAL_MEASURE            m_ManualMeausre;
    CPoint                    m_ptMouseSaved;                // Profile Save 扁瓷矫 荤侩
 
    IViewInterface2Parent    *m_pI2M;
    
    CRect                    m_rcROI;                    // 泅力 焊咯瘤绊 乐绰 康开
    CFont                    m_sideFont;
    CImage                  m_ImageMagnify;
    EXECPTION_AREA            m_refMark;
    EXECPTION_AREA            *m_pCompareArea;
    _ST_GDI_ITEM            m_st_GdiItem;        
    
    CGlass_Data    *            m_pGlassData;
    CHardwareSettings*        m_pHardware;
    CGlassRecipe*            m_pRecipe;
 
public:    
    CPoint            m_ptMouseCurrent;                    // 泅犁 付快胶 谅钎
    EXECPTION_AREA  *m_pTracker;
    CRect            m_WndRect;
    POINT            m_ptOrg;                            // 傈眉 捞固瘤俊辑 Display 矫累 谅钎
 
    int                m_nModeTrackerVCR;
    CPoint            m_ptOldMouseVCR;    
    */
 
#if HALCON_VISION_KEY
private:
    BOOL                        m_isMouseDown;
    CPoint                      m_ptMouseDown;
 
public:
    void UpdataVisionResult(void);
 
private:
    void UpdateView_VisionResult(CDC* memDC);
 
public:
    afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
#endif // HALCON_VISION_KEY
};