SDC C-Project CF Review 프로그램
Ongoing90 #3684 CF AOI Review 전설비 Review History Defect이미지 클릭시 Offset 자동 계산 기능 추가

- 최종 Offset 수정일 보다 이전 글래스 데이터 로딩시 경고 팝업 생성(쓰레드)
- 리뷰 이미지 센터 라인 표시
7개 파일 변경됨
176 ■■■■■ 파일 변경됨
ReviewHistory/ReveiwHistory/ReveiwHistory.rc 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp 129 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h 24 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akFormationMap.h 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/akImageView.cpp 14 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/resource.h 4 ●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/bin/ReviewHistroy.exe 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistory.rc
Binary files differ
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
@@ -60,6 +60,7 @@
    , m_dEditOffsetX(0)
    , m_dEditOffsetY(0)
    , m_strGantryIdx(_T(""))
    , m_TextLastSaveOffsetTime(_T(""))
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
@@ -83,6 +84,11 @@
    m_dCurDefectIdx = 0;
    m_dCurDefectID = 0;
    /*< LYW 20211018 - #3684 ADD End >*/
    /*< LYW 20211029 - #3684 ADD Start >*/
    DWORD  dwThreadId = 0;
    HANDLE hThread = CreateThread(NULL, 0, RunThreadReviewHistory, this, 0, &dwThreadId);
    m_ThreadId = dwThreadId;
    /*< LYW 20211029 - #3684 ADD End >*/
    for (int i = 0; i < 105; i++)
    {
@@ -93,6 +99,13 @@
        m_nImageSize[i] = 0;
    }
}
/*< LYW 20211029 - #3684 ADD Start >*/
CReveiwHistoryDlg::~CReveiwHistoryDlg(void)
{
    PostThreadMessage(m_ThreadId, WM_QUIT, 0, 0);
}
/*< LYW 20211029 - #3684 ADD End >*/
void CReveiwHistoryDlg::DoDataExchange(CDataExchange* pDX)
{
@@ -112,6 +125,7 @@
    DDX_Text(pDX, IDC_EDIT_OFFSET_X, m_dEditOffsetX);
    DDX_Text(pDX, IDC_EDIT_OFFSET_Y, m_dEditOffsetY);
    DDX_Text(pDX, IDC_EDIT_DFFSET_GANTRY_IDX, m_strGantryIdx);
    DDX_Text(pDX, IDC_STATIC_LAST_SAVE_OFFSET_TIME, m_TextLastSaveOffsetTime);
}
BEGIN_MESSAGE_MAP(CReveiwHistoryDlg, CDialogEx)
@@ -124,6 +138,7 @@
    ON_BN_CLICKED(IDC_BUTTON_MAPVIEW_FIT, &CReveiwHistoryDlg::OnBnClickedButtonMapviewFit)
    ON_MESSAGE(UM_FORMMAP_DEFECTSELECT, OnMapDefectSelected)
    ON_MESSAGE(UM_FORMMAP_DEFECTMOUSEOVER, OnMapDefectMouseOver)
    ON_MESSAGE(UM_WARNING_OFFSET, OnDisplayWarning)
    ON_MESSAGE(UM_FORMMAP_IMAGEMOUSECLICK, OnImageClick)
    ON_COMMAND(ID_OPTION_PATHSETTING, &CReveiwHistoryDlg::OnOptionPathsetting)
    ON_COMMAND(ID_VIEW_ALLDEFECT, &CReveiwHistoryDlg::OnViewAlldefect)
@@ -1236,6 +1251,12 @@
    return 0;
}
LRESULT CReveiwHistoryDlg::OnDisplayWarning(WPARAM wParam, LPARAM lParam)
{
    AfxMessageBox(_T("선택하신 리뷰 데이터는 지금 적용된 OFFSET 데이터 이전의 데이터 입니다. 확실한 경우가 아니라면 OFFSET 셋팅을 금해주십시오."), MB_OK | MB_ICONWARNING);
    return 0;
}
LRESULT CReveiwHistoryDlg::OnListDefectSelected(WPARAM wParam, LPARAM lParam)
{
    int nSelectDefect = static_cast<int>(wParam);
@@ -1440,6 +1461,8 @@
        nSecond = write_local_time.wSecond;
        CString strTime;
        strTime.Format("%04d-%02d-%02d-%02d-%02d-%02d", nYear, nMonth, nDay, nHour, nMinute, nSecond);
        CloseHandle(h_File);
        
        m_vecStrGridTimeList.push_back(strTime);
    }
@@ -1557,6 +1580,12 @@
        Imagenoload();
        return;
    }
    /*< LYW 20211028 - #3684 ADD Start >*/
    CString strBinFileName;
    strBinFileName.Format("%s\\%s", strBinPath, strFileName);
    m_CurrentResultFileTime = GetCurrentResultFileTime(strBinFileName);
    /*< LYW 20211028 - #3684 ADD End >*/
    if (bNewFile && m_chkSingle.GetCheck())
    {
@@ -1783,6 +1812,10 @@
    {
        SetScrollSetting();
    }
    /*< LYW 20211028 - #3684 ADD Start >*/
    HWND hWnd = GetSafeHwnd();
    PostThreadMessage(m_ThreadId, UM_THREAD_WARNING_OFFSET, 0, 0);
    /*< LYW 20211028 - #3684 ADD End >*/
}
void CReveiwHistoryDlg::OnCbnSelchangeComboRawtype()
@@ -2693,6 +2726,63 @@
    m_ctlFileCount.GetWindowText(strCount);
    m_nFileCount = _ttoi(strCount);
}
/*< LYW 20211028 - #3684 ADD Start >*/
void CReveiwHistoryDlg::UpdateLastSaveOffsetTime(CString FileName)
{
    HANDLE h_file = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    FILETIME create_time, access_time, write_time;
    GetFileTime(h_file, &create_time, &access_time, &write_time);
    SYSTEMTIME access_system_time;
    FileTimeToSystemTime(&access_time, &access_system_time);
    SYSTEMTIME access_system_Local_time;
    SystemTimeToTzSpecificLocalTime(NULL, &access_system_time, &access_system_Local_time);
    CTime FIleTime(access_system_Local_time);
    m_LastSaveOffsetTime = FIleTime;
    CloseHandle(h_file);
    m_TextLastSaveOffsetTime.Format(_T("%04d/%02d/%02d/%02d:%02d:%02d"), m_LastSaveOffsetTime.GetYear(), m_LastSaveOffsetTime.GetMonth(),
        m_LastSaveOffsetTime.GetDay(), m_LastSaveOffsetTime.GetHour(), m_LastSaveOffsetTime.GetMinute(), m_LastSaveOffsetTime.GetSecond());
    UpdateData(FALSE);
}
CTime CReveiwHistoryDlg::GetCurrentResultFileTime(CString FileName)
{
    HANDLE h_file = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (h_file != INVALID_HANDLE_VALUE)
    {
        FILETIME create_time, access_time, write_time;
        GetFileTime(h_file, &create_time, &access_time, &write_time);
        SYSTEMTIME access_system_time;
        FileTimeToSystemTime(&access_time, &access_system_time);
        SYSTEMTIME access_system_Local_time;
        SystemTimeToTzSpecificLocalTime(NULL, &access_system_time, &access_system_Local_time);
        CloseHandle(h_file);
        CTime FIleTime(access_system_Local_time);
        m_CurrentResultFileTime = FIleTime;
        return m_CurrentResultFileTime;
    }
    else
    {
        return CTime::GetCurrentTime();
    }
}
/*< LYW 20211028 - #3684 ADD End >*/
BOOL CReveiwHistoryDlg::GetCheckFileLoad(int nCount)
{
@@ -3949,6 +4039,8 @@
    if (!macroFile.Read(strFilePath))
        return FALSE;
    UpdateLastSaveOffsetTime(strFilePath);
    macroFile.GetItem(_T("CAMERA_COUNT"), m_nCameraCount, 0);
    macroFile.GetItem(_T("SCAN_COUNT"), m_nScanCount, 0);
    macroFile.GetItem(_T("XPOS_COUNT"), m_XposCount, 0);
@@ -4004,6 +4096,9 @@
    CString strForderPath;
    CString strFileName;
    CTime time = CTime::GetCurrentTime();
    /*< LYW 20211028 - #3684 ADD Start >*/
    m_LastSaveOffsetTime = time;
    /*< LYW 20211028 - #3684 ADD End >*/
    strFileName.Format(_T("ReviewOffSet_%04d%02d%02d%02d%02d%02d.cfg"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
    strForderPath.Format(_T("%s%s"), REVIEW_OFFSET_BACKUP_FORDER_PATH, strFileName);
@@ -4070,8 +4165,14 @@
    bReturn = macroFile.Write(strFilePath);
    if (bReturn) AfxMessageBox(_T("OFFSET SAVE SUCCESS"), MB_OK | MB_ICONASTERISK);
    else AfxMessageBox(_T("OFFSET SAVE FAIL"), MB_OK | MB_ICONASTERISK);
    if (bReturn)
    {
        /*< LYW 20211028 - #3684 ADD Start >*/
        UpdateLastSaveOffsetTime(strFilePath);
        AfxMessageBox(_T("OFFSET SAVE SUCCESS"), MB_OK | MB_ICONASTERISK);
        /*< LYW 20211028 - #3684 ADD End >*/
    }
    else AfxMessageBox(_T("OFFSET SAVE FAIL"), MB_OK | MB_ICONHAND);
    return bReturn;
}
@@ -4259,3 +4360,27 @@
    }
}
/*< LYW 20211025 - #3684 ADD End >*/
/*< LYW 20211029 - #3684 ADD Start >*/
DWORD RunThreadReviewHistory(LPVOID param)
{
    MSG msg;
    CReveiwHistoryDlg* pDlg = (CReveiwHistoryDlg*)param;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        //CString* pstrLog = reinterpret_cast<CString*>(msg.wParam);
        switch (msg.message)
        {
        case UM_THREAD_WARNING_OFFSET:
            Sleep(100);
            pDlg->PostMessage(UM_WARNING_OFFSET);
            break;
        default:
            break;
        }
    }
    return 0;
}
/*< LYW 20211029 - #3684 ADD End >*/
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h
@@ -63,12 +63,19 @@
typedef std::vector<VecOffSetScanData> VecOffSetCameraInfo;
/*< LYW 20211025 - #3684 ADD End >*/
/*< LYW 20211029 - #3684 ADD Start >*/
DWORD RunThreadReviewHistory(LPVOID param);
/*< LYW 20211029 - #3684 ADD End >*/
// CReveiwHistoryDlg 대화 상자
class CReveiwHistoryDlg : public CDialogEx
{
// 생성입니다.
public:
    CReveiwHistoryDlg(CWnd* pParent = nullptr);    // 표준 생성자입니다.
    /*< LYW 20211029 - #3684 ADD Start >*/
    ~CReveiwHistoryDlg(void);
    /*< LYW 20211029 - #3684 ADD End >*/
// 대화 상자 데이터입니다.
#ifdef AFX_DESIGN_TIME
@@ -149,6 +156,14 @@
    int m_dCurDefectIdx;
    int m_dCurDefectID;
    /*< LYW 20211018 - #3684 ADD End >*/
    /*< LYW 20211028 - #3684 ADD Start >*/
    CTime m_LastSaveOffsetTime;
    CTime m_CurrentResultFileTime;
    /*< LYW 20211028 - #3684 ADD End >*/
    /*< LYW 20211029 - #3684 ADD Start >*/
    DWORD m_ThreadId;
    /*< LYW 20211029 - #3684 ADD End >*/
    // tracker
    BOOL            m_bDrawTracker;
@@ -243,6 +258,7 @@
    afx_msg void OnBnClickedButtonMapviewFit();
    afx_msg void OnDestroy();
    afx_msg LRESULT OnMapDefectSelected(WPARAM wParam, LPARAM lParam);
    afx_msg LRESULT OnDisplayWarning(WPARAM wParam, LPARAM lParam);
    afx_msg LRESULT OnMapDefectMouseOver(WPARAM wParam, LPARAM lParam);
    afx_msg LRESULT OnListDefectSelected(WPARAM wParam, LPARAM lParam);
    /*< LYW 20211018 - #3684 ADD Start >*/
@@ -312,6 +328,11 @@
    void ImageRotate(CImage& SrcImage, CImage& DstImage, double degree = 180.0);
    //LYW 20210825 #3486 ADD END
    /*< LYW 20211028 - #3684 ADD Start >*/
    void UpdateLastSaveOffsetTime(CString FileName);
    CTime GetCurrentResultFileTime(CString FileName);
    /*< LYW 20211028 - #3684 ADD End >*/
    BOOL GetCheckFileLoad(int nCount);
    void GlassInfoRest();
@@ -350,4 +371,7 @@
    double m_dEditOffsetX;
    double m_dEditOffsetY;
    CString m_strGantryIdx;
    /*< LYW 20211028 - #index ADD Start >*/
    CString m_TextLastSaveOffsetTime;
    /*< LYW 20211028 - #index ADD End >*/
};
ReviewHistory/ReveiwHistory/akFormationMap.h
@@ -5,6 +5,11 @@
#define UM_FORMMAP_DEFECTMOUSEOVER WM_USER+0x2001
#define UM_FORMMAP_DEFECTSELECT WM_USER+0x2002
/*< LYW 20211028 - #3684 ADD Start >*/
#define UM_WARNING_OFFSET WM_USER+0x2004
//Thread msg Map
#define UM_THREAD_WARNING_OFFSET WM_USER + 0x1001
/*< LYW 20211028 - #3684 ADD End >*/
class CakFormationMap : public CakGraphBasic3
{
ReviewHistory/ReveiwHistory/akImageView.cpp
@@ -268,8 +268,11 @@
        //글라스 외각선 그리기 태현[2016/3/23]
        {
            pOldBrush = (CBrush*)pDC->SelectObject(&BrushGlass);
            CPen pen;
            CPen pen, CenterLinePen;
            pen.CreatePen(PS_SOLID, 1, RGB(64, 191, 79));
            /*< LYW 20211029 - #3684 ADD Start >*/
            CenterLinePen.CreatePen(PS_DOT, 1, RGB(255, 0, 0));
            /*< LYW 20211029 - #3684 ADD End >*/
            pDC->SelectObject(&pen);
            pDC->MoveTo(GetWindowPosX(rectGlass.left), GetWindowPosY(rectGlass.top));
@@ -278,7 +281,16 @@
            pDC->LineTo(GetWindowPosX(rectGlass.left), GetWindowPosY(rectGlass.bottom));
            pDC->LineTo(GetWindowPosX(rectGlass.left), GetWindowPosY(rectGlass.top));
            /*< LYW 20211029 - #3684 ADD Start >*/
            pDC->SelectObject(&CenterLinePen);
            pDC->MoveTo(GetWindowPosX((rectGlass.left + rectGlass.right) / 2), GetWindowPosY(rectGlass.top));
            pDC->LineTo(GetWindowPosX((rectGlass.left + rectGlass.right) / 2), GetWindowPosY(rectGlass.bottom));
            pDC->MoveTo(GetWindowPosX(rectGlass.left), GetWindowPosY((rectGlass.top + rectGlass.bottom) / 2));
            pDC->LineTo(GetWindowPosX(rectGlass.right), GetWindowPosY((rectGlass.top + rectGlass.bottom) / 2));
            /*< LYW 20211029 - #3684 ADD End >*/
            pDC->SelectObject(&pOldBrush);
        }
    }
    pDC->SelectClipRgn(NULL);    
ReviewHistory/ReveiwHistory/resource.h
@@ -93,6 +93,8 @@
#define IDC_EDIT_OFFSET_Y               1058
#define IDC_BUTTON_OFFSET_SAVE          1059
#define IDC_BUTTON_OFFSET_APPLY         1060
#define IDC_STATIC_GROUP_LAST_OFFSET_SAVE_TIME 1061
#define IDC_STATIC_LAST_SAVE_OFFSET_TIME 1062
#define ID_OPTION_PATHSETTING           32771
#define ID_VIEW_ALLDEFECT               32772
#define ID_VIEW_REVIEWDEFECT            32773
@@ -105,7 +107,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        150
#define _APS_NEXT_COMMAND_VALUE         32776
#define _APS_NEXT_CONTROL_VALUE         1061
#define _APS_NEXT_CONTROL_VALUE         1063
#define _APS_NEXT_SYMED_VALUE           104
#endif
#endif
ReviewHistory/bin/ReviewHistroy.exe
Binary files differ