SDC C-Project CF Review 프로그램
KEJ
2023-11-24 9020bfb6f86ff853d5d5b3cee882132a244232da
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
#pragma once
#include <vector>
#include <map>
 
#define OFFSET_LIST_GRID_ROW_COUNT  1
#define OFFSET_LIST_GRID_COL_COUNT  3 
 
#define  FIXCELLCOLOR RGB(255, 102, 178)
#define  NOFIXCELLCOLOR RGB(240, 240, 240)
#define  MINCELLCOLOR RGB(204, 204, 255)
#define  MAXCELLCOLOR RGB(204, 255, 204)
#define    MOTOR_OFFSET_CONFIGFILE_DEFAULT_NAME _T("MotorOffset")
#define    MOTOR_OFFSET_BACKUP_FORDER_NAME _T("OffsetBackup")
#define    MOTOR_OFFSET_BACKUP_FORDER_PATH _T("D:\\DIT_Review\\ReviewServerConfig\\ReviewOffset\\OffsetBackup\\")
#define GRID_ROW_START_POINT 2
#define GRID_COL_START_POINT 2
 
interface IDialogMotorOffSet2Parent 
{
    virtual BOOL IDMO2P_GetMotorPos(int nModule, double &dXpos, double &dYpos) = 0;
};
struct MotorOffSetInfo
{    
    double dXoffSetValue;
    double dYoffSetValue;
    MotorOffSetInfo() {
        dXoffSetValue = 0;
        dYoffSetValue = 0;
    }
    bool operator==(const MotorOffSetInfo& input) const
    {
        return 0 == memcmp(&input, this, sizeof(MotorOffSetInfo));
    }
};
typedef std::vector<MotorOffSetInfo> VecMotorOffSetData;
 
class CMotorOffsetData
{
public:
    CMotorOffsetData() { ; }
 
    ~CMotorOffsetData() { ; }
 
    // Defect Review
    BOOL            CalcOffset(_Inout_ double& GlassPosX, _Inout_ double& GlassPos);
 
    // Setting Dlg
    void            SetRangeCountX(_In_ unsigned int nCount);
    void            SetRangeCountY(_In_ unsigned int nCount);
    BOOL            SetRangeX(_In_ unsigned int nIdx, _In_ double fX);
    BOOL            SetRangeY(_In_ unsigned int nIdx, _In_ double fY);
 
    int                GetRangeCountX();
    int                GetRangeCountY();
    double            GetRangeX(_In_ unsigned int nIdx);
    double            GetRangeY(_In_ unsigned int nIdx);
 
    BOOL            SetOffsetValue(_In_ unsigned int nXIndex, _In_ unsigned int nYIndex, _In_ MotorOffSetInfo pOffsetInfo);
 
    MotorOffSetInfo        GetOffsetValue(_In_ int nXIndex, _In_ int nYIndex);
 
    // File Access
    BOOL            WriteConfigFile(int nIdx);
    BOOL            ReadConfigFile(int nIdx);
 
    //Read Func
    BOOL LoadInfo(CString strFilePath, int nIdx);
 
    bool operator==(const CMotorOffsetData& input) const
    {
        if (this->m_vtXRange == input.m_vtXRange)
        {
            if (this->m_vtYRange == input.m_vtYRange)
            {
                if (this->m_mapOffsetInfo == input.m_mapOffsetInfo)
                {
 
                    return TRUE;
                }
            }
        }
        else FALSE;
    }
 
protected:
 
    std::vector<double>        m_vtXRange;
    std::vector<double>        m_vtYRange;
    std::map<int, std::map<int, MotorOffSetInfo>>    m_mapOffsetInfo;  // <YRange , <XRange , OffsetInfo> >
private:
 
 
};
typedef std::map<int, CMotorOffsetData>                    MapMotorOffSetInfo;
 
 
class CDlgMotorOffSetTool : public CDialogEx
{
    DECLARE_DYNAMIC(CDlgMotorOffSetTool)
 
public:
    CDlgMotorOffSetTool(CWnd* pParent = nullptr);   // 표준 생성자입니다.
    virtual ~CDlgMotorOffSetTool();
 
    // 대화 상자 데이터입니다.
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_DLG_MOTOR_OFFSET_TOOL };
#endif
 
 
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 지원입니다.
 
    DECLARE_MESSAGE_MAP()
 
public:
    virtual BOOL OnInitDialog();
    afx_msg void OnBnClickedOK();
    afx_msg void OnBnClickedCancel();
    afx_msg void OnXCountKillFocus();
    afx_msg void OnYCountKillFocus();
 
    void InitOffSetInfoGridControl();
    void SetColorType();
    void InitProcess();
    void UpdateGridcontrol();
    void SetDMO2P(IDialogMotorOffSet2Parent* pDMO2P) { m_pDMO2P = pDMO2P; }
 
    BOOL CalOffsetInfo(int nModuleIdx, double &XPos, double &YPos);
    ////////////==============================
    void ApplyOffSetInfo(); //Grid -> Map
    //////////================================
 
protected:
    CRITICAL_SECTION            m_csMapSafer;
 
    COLORTYPE Color[10];
 
    int m_nEditXposCount;
    int m_nEditYposCount;
    // 설비별 Offset 
    int m_nCurOffsetModuleIdx;
public:
    CGridCtrl m_ctrlGridMotorOffSetInfo;
    IDialogMotorOffSet2Parent* m_pDMO2P;
 
    MapMotorOffSetInfo            m_mapMotorOffsetInfo;
    MapMotorOffSetInfo            m_mapMotorOffsetInfo_OLD;
    CComboBox m_ctrlCmbModuleIdx;
    afx_msg void OnSelchangeComboMotorOffsetModuleidx();
};