From 08215fc9a36a1648e1a5040ffe5696b96483c3b9 Mon Sep 17 00:00:00 2001 From: LYW <leeyeanwoo@diteam.co.kr> Date: 월, 01 11월 2021 14:39:43 +0900 Subject: [PATCH] Ongoing90 #3684 CF AOI Review 전설비 Review History Defect이미지 클릭시 Offset 자동 계산 기능 추가 --- ReviewHistory/ReveiwHistory/resource.h | 4 + ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp | 129 ++++++++++++++++++++++++++++++++++++++++++ ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h | 24 ++++++++ ReviewHistory/ReveiwHistory/akImageView.cpp | 14 ++++ ReviewHistory/ReveiwHistory/ReveiwHistory.rc | 0 ReviewHistory/bin/ReviewHistroy.exe | 0 ReviewHistory/ReveiwHistory/akFormationMap.h | 5 + 7 files changed, 172 insertions(+), 4 deletions(-) diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistory.rc b/ReviewHistory/ReveiwHistory/ReveiwHistory.rc index 3a41ab0..ad8cfd9 100644 --- a/ReviewHistory/ReveiwHistory/ReveiwHistory.rc +++ b/ReviewHistory/ReveiwHistory/ReveiwHistory.rc Binary files differ diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp index 0f820c7..400bc82 100644 --- a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp +++ b/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 >*/ \ No newline at end of file diff --git a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h b/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h index 420f3fb..7f87bc7 100644 --- a/ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h +++ b/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 >*/ }; diff --git a/ReviewHistory/ReveiwHistory/akFormationMap.h b/ReviewHistory/ReveiwHistory/akFormationMap.h index 2312a97..f5d2bb6 100644 --- a/ReviewHistory/ReveiwHistory/akFormationMap.h +++ b/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 { diff --git a/ReviewHistory/ReveiwHistory/akImageView.cpp b/ReviewHistory/ReveiwHistory/akImageView.cpp index cd95e60..fda76d2 100644 --- a/ReviewHistory/ReveiwHistory/akImageView.cpp +++ b/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); diff --git a/ReviewHistory/ReveiwHistory/resource.h b/ReviewHistory/ReveiwHistory/resource.h index 267fb35..bc22a56 100644 --- a/ReviewHistory/ReveiwHistory/resource.h +++ b/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 diff --git a/ReviewHistory/bin/ReviewHistroy.exe b/ReviewHistory/bin/ReviewHistroy.exe index 4e7d312..3ac950b 100644 --- a/ReviewHistory/bin/ReviewHistroy.exe +++ b/ReviewHistory/bin/ReviewHistroy.exe Binary files differ -- Gitblit v1.9.3