#include "stdafx.h" #include "ReviewSystem.h" #include "DlgDefectHistoryMap.h" #include "CHReviewSetting/SystemInfo.h" #define ID_TIMER_SELECT_DEFECT 1500 // CDlgDefectMap ´ëÈ­ »óÀÚÀÔ´Ï´Ù. IMPLEMENT_DYNAMIC(CDlgDefectHistoryMap, CDialog) #define MAX_MODULE_COUNT 4 CDlgDefectHistoryMap::CDlgDefectHistoryMap(CWnd* pParent /*=NULL*/) : CDialog(CDlgDefectHistoryMap::IDD, pParent) { m_nProcessStatus = 0; m_pDDM2P = NULL; m_pDefectMap = NULL; m_pDefectFilter = NULL; m_pGlassResult = NULL; m_bTimerColor = FALSE; m_pSelectDefectResult = NULL; m_nSelectedIndex = -1; m_bDefectUse = FALSE; m_dDefectZoom = 1.0; m_drevDefectZoom = 1.0; } CDlgDefectHistoryMap::~CDlgDefectHistoryMap() { if (m_pDefectMap) { delete m_pDefectMap; } m_pDefectMap = NULL; } void CDlgDefectHistoryMap::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CDlgDefectHistoryMap, CDialog) ON_MESSAGE(UM_DEFECT_FILTER_UPDATE, &CDlgDefectHistoryMap::OnDefectFilterUpdate) ON_MESSAGE(UM_MOTOR_POSITION_UPDATE, &CDlgDefectHistoryMap::OnMotorPositionUpdate) ON_MESSAGE(UM_PROCESS_STATUS_UPDATE, &CDlgDefectHistoryMap::OnProcessStatusUpdate) ON_MESSAGE(UM_REVIEW_RESULT_UPDATE, &CDlgDefectHistoryMap::OnReviewResultUpdate) ON_MESSAGE(UM_WSI_RESULT_UPDATE, &CDefectMap::OnReviewResultUpdate)//1218 ON_MESSAGE(UM_LBDOWN_DEFECT_MAP2, &CDlgDefectHistoryMap::OnDBLCLKDefectMap)//OnLBDOWNDefectMap) //taek 210213 ON_MESSAGE(UM_DBLCLK_DEFECT_MAP, &CDlgDefectHistoryMap::OnDBLCLKDefectMap) //taek 210213 ON_MESSAGE(UM_MOUSEWHEEL_DEFECT_MAP, &CDlgDefectHistoryMap::OnMouseWheelDefectMap) ON_WM_TIMER() ON_WM_ERASEBKGND() ON_WM_CTLCOLOR() //ON_MESSAGE(UM_LCLK_DEFECT_MAP, &CDlgDefectHistoryMap::OnLCLKDefectMap) END_MESSAGE_MAP() // CDlgDefectMap ¸Þ½ÃÁö 󸮱âÀÔ´Ï´Ù. BOOL CDlgDefectHistoryMap::OnInitDialog() { CDialog::OnInitDialog(); // TODO: ¿©±â¿¡ Ãß°¡ ÃʱâÈ­ ÀÛ¾÷À» Ãß°¡ÇÕ´Ï´Ù. CRect rect; GetClientRect(rect); rect.left = 0; rect.top = 0; rect.right = rect.left + 810 - 5; rect.bottom = rect.top + 395 - 5; m_pDefectMap = new CDefectMap(this); if (m_pDefectMap) { m_pDefectMap->Create(NULL, NULL, WS_CHILD | WS_VISIBLE | LBS_NOTIFY, rect, this, 0); m_pDefectMap->SetGlassInfo(800000, 920000, GLASS_CORNERCUT_LEFT_TOP, GlassOriginDir_LeftTop); m_pDefectMap->ShowWindow(SW_SHOW); } SMotorPosition sMotorPosition; m_vecMotorPos.push_back(sMotorPosition); m_vecMotorPos.resize(MAX_MODULE_COUNT); return TRUE; // return TRUE unless you set the focus to a control } BOOL CDlgDefectHistoryMap::PreTranslateMessage(MSG* pMsg) { // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. if (pMsg->message == WM_KEYDOWN) { if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) { ::TranslateMessage(pMsg); ::DispatchMessage(pMsg); return TRUE; } } return CDialog::PreTranslateMessage(pMsg); } void CDlgDefectHistoryMap::UpdateProcessStatus(const CGlassResult* pGlassResult) { if (pGlassResult == NULL) return; KillTimer(ID_TIMER_SELECT_DEFECT); m_pSelectDefectResult = NULL; if (m_pDefectMap) { m_pDefectMap->SetGlassResult2(pGlassResult,GetHistoryDefect()); m_pDefectMap->PostMessage(UM_UPDATE_DEFECT_MAP2, NULL, NULL); this->SendMessage(UM_PROCESS_STATUS_UPDATE); } } LRESULT CDlgDefectHistoryMap::OnProcessStatusUpdate(WPARAM wParam, LPARAM lParam) { return 1; } void CDlgDefectHistoryMap::UpdateMotorPosition(int nModuleIndex, BOOL bSelected, const SMotorPosition* pMotorPosition) { if (pMotorPosition == NULL) return; if (m_pDefectFilter == NULL) return; if (m_pDefectFilter->pDraw[MapDrawCameraPosition] == FALSE) return; if (nModuleIndex < 0 || nModuleIndex >= m_vecMotorPos.size()) return; double dDiffX = m_pDefectMap->GetScaleX() * fabs(m_vecMotorPos[nModuleIndex].dGlassPosX - pMotorPosition->dGlassPosX); double dDiffY = m_pDefectMap->GetScaleY() * fabs(m_vecMotorPos[nModuleIndex].dGlassPosY - pMotorPosition->dGlassPosY); if (bSelected) m_nSelectedIndex = nModuleIndex; m_vecMotorPos[nModuleIndex] = *pMotorPosition; if (dDiffX >= 1.0 || dDiffY >= 1.0) this->PostMessage(UM_MOTOR_POSITION_UPDATE, nModuleIndex); } LRESULT CDlgDefectHistoryMap::OnDBLCLKDefectMap(WPARAM wParam, LPARAM lParam) { int nDefectPosX, nDefectPosY; nDefectPosX = static_cast(wParam); nDefectPosY = static_cast(lParam); int nDefectMarginX = int(DEFECT_SIZE * m_pDefectMap->GetScaleX()); int nDefectMarginY = int(DEFECT_SIZE * m_pDefectMap->GetScaleY()); if (m_pDDM2P) { m_pDDM2P->SelectDefect(nDefectPosX, nDefectPosY, nDefectMarginX, nDefectMarginY); } return 0; } LRESULT CDlgDefectHistoryMap::OnMouseWheelDefectMap(WPARAM wParam, LPARAM lParam) { double dDefectZoom = 1.0, dRevDefectZoom = 1.0; short m_sDelta = 0; m_sDelta = wParam; if (m_pDefectFilter == NULL) return 0; dDefectZoom = GetDefectZoom(); dRevDefectZoom = GetrevDefectZoom(); if (m_sDelta > 0) { double dDefectTemp = dDefectZoom; dDefectZoom += 0.05; dRevDefectZoom -= 0.05; if (dRevDefectZoom < 0.6) { dRevDefectZoom = 0.6; dDefectZoom = dDefectTemp; } } else { double dDefectTemp = dDefectZoom; dDefectZoom -= 0.05; dRevDefectZoom += 0.05; if (m_dDefectZoom < 0.6) { m_dDefectZoom = 0.6; dDefectZoom = dRevDefectZoom; } else if (dDefectZoom < 1.0) { dDefectZoom = 1.0; dRevDefectZoom = 1.0; } } if (m_pDefectMap) { m_pDefectMap->SetDefectZoom(dDefectZoom); m_pDefectMap->SetrevDefectZoom(dRevDefectZoom); m_pDefectMap->PostMessage(UM_HISTORY_MOUSEWHELL, dDefectZoom, dRevDefectZoom); SetDefectZoom(dDefectZoom); SetrevDefectZoom(dRevDefectZoom); } return 0(); } void CDlgDefectHistoryMap::UpdateDefectFilter(const SDefectFilter* pDefectFilter) { if (pDefectFilter == NULL) return; m_pDefectFilter = pDefectFilter; this->PostMessage(UM_DEFECT_FILTER_UPDATE); } LRESULT CDlgDefectHistoryMap::OnDefectFilterUpdate(WPARAM wParam, LPARAM lParam) { if (m_pDefectMap && m_pDefectFilter) { m_pDefectMap->SetDefectFilter(m_pDefectFilter); m_pDefectMap->PostMessage(UM_UPDATE_DEFECT_MAP2, NULL, NULL); } return 0; } void CDlgDefectHistoryMap::UpdateReviewResult(int nModuleIndex, const CGlassResult* pGlassResult, int nPlanIdex) { if (pGlassResult == NULL) return; m_pGlassResult = pGlassResult; this->PostMessage(UM_REVIEW_RESULT_UPDATE, (WPARAM)nModuleIndex); } void CDlgDefectHistoryMap::UpdateReviewResult2(const CGlassResult* pGlassResult) { if (pGlassResult == NULL) return; m_pGlassResult = pGlassResult; } LRESULT CDlgDefectHistoryMap::OnReviewResultUpdate(WPARAM wParam, LPARAM lParam) { if (m_pDefectMap && m_pGlassResult) { m_pDefectMap->SetGlassResult2(m_pGlassResult, TRUE); m_pDefectMap->PostMessage(UM_UPDATE_DEFECT_MAP2, NULL, NULL); } return 1; } BOOL CDlgDefectHistoryMap::DestroyWindow() { // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. if (m_pDefectMap) { m_pDefectMap->DestroyWindow(); } return __super::DestroyWindow(); } LRESULT CDlgDefectHistoryMap::OnMotorPositionUpdate(WPARAM wParam, LPARAM lParam) { int i, nCount, nPosX, nPosY;; VectorInteger vectorType, vectorPosX, vectorPosY; nCount = (int)m_vecMotorPos.size(); for (i = 0; i < nCount; i++) { nPosX = (int)(m_vecMotorPos[i].dGlassPosX*1000.); nPosY = (int)(m_vecMotorPos[i].dGlassPosY*1000.); vectorType.push_back(0); vectorPosX.push_back(nPosX); vectorPosY.push_back(nPosY); nPosX = (int)(m_vecMotorPos[i].dWSIPosX*1000.); nPosY = (int)(m_vecMotorPos[i].dWSIPosY*1000.); vectorType.push_back(1); vectorPosX.push_back(nPosX); vectorPosY.push_back(nPosY); } m_pDefectMap->SetSelectedCameraIndex(m_nSelectedIndex); m_pDefectMap->DrawCamera(vectorType, vectorPosX, vectorPosY); return 0; } LRESULT CDlgDefectHistoryMap::OnLBDOWNDefectMap(WPARAM wParam, LPARAM lParam) { if (m_pDefectMap) m_pDefectMap->PostMessage(UM_UPDATE_DEFECT_MAP_DEFAULT, NULL, NULL); return 0; } void CDlgDefectHistoryMap::UpdateSelectDefectMap(CDefectResult* pDefectResult) { KillTimer(ID_TIMER_SELECT_DEFECT); if (m_pSelectDefectResult) { // ¿ø·¡ »öÀ¸·Î ¿øº¹ COLORREF color; if (m_pSelectDefectResult->bMeasurePoint) { color = RGB(0, 0, 0); } else { color = RGB(255, 0, 0); } m_pDefectMap->DrawDefectPoint(m_pSelectDefectResult->nUMOriginX, m_pSelectDefectResult->nUMOriginY, color); } if (pDefectResult->bMeasurePoint) { m_measurePoint = *pDefectResult; m_pSelectDefectResult = &m_measurePoint; } else { m_pSelectDefectResult = pDefectResult; } SetTimer(ID_TIMER_SELECT_DEFECT, 100, NULL); } void CDlgDefectHistoryMap::OnTimer(UINT_PTR nIDEvent) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. switch (nIDEvent) { case ID_TIMER_SELECT_DEFECT: COLORREF color; if (m_pGlassResult == NULL) return; if ((m_pGlassResult->GetDefectResultCount() != 0) && m_pSelectDefectResult) { if (m_bTimerColor) { color = RGB(255, 255, 255); } else { color = RGB(0, 0, 0); } m_pDefectMap->DrawDefectPoint2(m_pSelectDefectResult->nUMOriginX, m_pSelectDefectResult->nUMOriginY, color); m_bTimerColor = !m_bTimerColor; } break; } __super::OnTimer(nIDEvent); } void CDlgDefectHistoryMap::SetDefaultGlassType(const CGlassResult* pGlassResult) { if (m_pDefectMap) { m_pDefectMap->SetGlassResult2(pGlassResult, TRUE); //m_pDefectMap->SetGlassResult(pGlassResult); m_pDefectMap->PostMessage(UM_UPDATE_DEFECT_MAP2, NULL, NULL); } } //181203 BOOL CDlgDefectHistoryMap::SaveDefectMap(const CString& strPath) { if (m_pDefectMap == NULL || strPath.IsEmpty()) return FALSE; return m_pDefectMap->SaveImage(strPath); } BOOL CDlgDefectHistoryMap::OnEraseBkgnd(CDC* pDC) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. CRect rect; GetClientRect(&rect); __super::OnEraseBkgnd(pDC); pDC->FillSolidRect(rect, RGB(38, 38, 38)); return TRUE; } HBRUSH CDlgDefectHistoryMap::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = __super::OnCtlColor(pDC, pWnd, nCtlColor); CRect rect; CString strClass = _T(""); UINT nID = pWnd->GetDlgCtrlID(); if (nCtlColor == CTLCOLOR_STATIC) { pDC->SetTextColor(RGB(255, 255, 255)); pDC->SetBkColor(RGB(38, 38, 38)); hbr = (HBRUSH)GetStockObject(NULL_BRUSH); } // TODO: ±âº»°ªÀÌ Àû´çÇÏÁö ¾ÊÀ¸¸é ´Ù¸¥ ºê·¯½Ã¸¦ ¹ÝȯÇÕ´Ï´Ù. return hbr; } afx_msg LRESULT CDlgDefectHistoryMap::OnLCLKDefectMap(WPARAM wParam, LPARAM lParam) { int nDefectPosX, nDefectPosY; nDefectPosX = static_cast(wParam); nDefectPosY = static_cast(lParam); int nDefectMarginX = int(DEFECT_SIZE * m_pDefectMap->GetScaleX()); int nDefectMarginY = int(DEFECT_SIZE * m_pDefectMap->GetScaleY()); if (m_pDDM2P) { m_pDDM2P->SelectDefect(nDefectPosX, nDefectPosY, nDefectMarginX, nDefectMarginY); } return 0; }