#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<int>(wParam);
|
nDefectPosY = static_cast<int>(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<int>(wParam);
|
nDefectPosY = static_cast<int>(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;
|
}
|