// ChipInspectDlg.cpp : ʵÏÖÎļþ // #include "stdafx.h" #include "BlVisionPro.h" #include "ChipInspectDlg.h" #include "afxdialogex.h" #include "VisionBufferPro.h" #include "FileRecipe.h" #include "InChipDotProcess.h" // CChipInspectDlg ¶Ô»°¿ò IMPLEMENT_DYNAMIC(CChipInspectDlg, CDialogEx) CChipInspectDlg::CChipInspectDlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_DIALOG_CHIP_INSPECT, pParent) , m_imageIndex(1) , m_nMinX(0) , m_nMaxX(0) , m_nEdgeChipThres(20) { m_display = NULL; m_ptMouseUp.x = 0; m_ptMouseUp.y = 0; } CChipInspectDlg::~CChipInspectDlg() { if (NULL != m_display) { ClsDisplay_Free(m_display); m_display = NULL; } } void CChipInspectDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBO_SIDE_INDEX_INCHIP, m_combSide); DDX_Text(pDX, IDC_EDIT_IMAGE_INDEX_INCHIP, m_imageIndex); DDX_Text(pDX, IDC_EDIT_INCHIP_MINX, m_nMinX); DDX_Text(pDX, IDC_EDIT_INCHIP_MAXX, m_nMaxX); DDX_Text(pDX, IDC_EDIT_EDGE_THRES_INCHIP, m_nEdgeChipThres); } BEGIN_MESSAGE_MAP(CChipInspectDlg, CDialogEx) ON_WM_CLOSE() ON_BN_CLICKED(IDC_BUTTON_GET_IMAGE_INCHIP, &CChipInspectDlg::OnBnClickedButtonGetImageInchip) ON_BN_CLICKED(IDC_BUTTON_PROCESS_INCHIP, &CChipInspectDlg::OnBnClickedButtonProcessInchip) END_MESSAGE_MAP() // CChipInspectDlg ÏûÏ¢´¦Àí³ÌÐò BOOL CChipInspectDlg::PreTranslateMessage(MSG* pMsg) { // TODO: ÔÚ´ËÌí¼ÓרÓôúÂëºÍ/»òµ÷ÓûùÀà if (pMsg->message == WM_KEYDOWN) { if ((pMsg->wParam == VK_RETURN) || (pMsg->wParam == VK_ESCAPE)) { return TRUE; } } return CDialogEx::PreTranslateMessage(pMsg); } BOOL CChipInspectDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // TODO: ÔÚ´ËÌí¼Ó¶îÍâµÄ³õʼ»¯ InitDisplay(); InitUiParam(); return TRUE; // return TRUE unless you set the focus to a control // Òì³£: OCX ÊôÐÔÒ³Ó¦·µ»Ø FALSE } void CChipInspectDlg::OnClose() { // TODO: ÔÚ´ËÌí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂëºÍ/»òµ÷ÓÃĬÈÏÖµ CDialogEx::OnClose(); } void CChipInspectDlg::InitDisplay(void) { /* code */ m_display = ClsDisplay_Create(); if (nullptr != m_display) { CRect rect; CWnd * pDispWnd = GetDlgItem(IDC_STATIC_IMAGE_INCHIP); pDispWnd->GetWindowRect(rect); m_display->OpenWindow((__int64)pDispWnd->m_hWnd, rect.Width(), rect.Height()); m_display->SetOperFlag(SELECT_OPER_FLAG); m_display->SetDraw("fill", DISP_OBJECT); m_display->SetColor("red", DISP_OBJECT); m_display->SetDraw("fill", DISP_REGION); m_display->SetColor("red", DISP_REGION); m_display->SetDraw("fill", DISP_CROSS); m_display->SetColor("green", DISP_CROSS); m_display->SetDraw("fill", DISP_SELECT); m_display->SetColor("red", DISP_SELECT); std::string color = ClsVision::Rgb2Color(0, 0, 100); m_display->SetBackgroundColor(color); m_display->SetOperatorCallback([&](int msgEvent, int x, int y, double rate, int pixel) ->void { MouseEventProc(msgEvent, x, y); //1. ±íʾɨÃè }); } } void CChipInspectDlg::MouseEventProc(int msgEvent, int x, int y) { /* code */ BOOL isChange = FALSE; if (LEFT_MOUSE_BUTTON_UP == msgEvent) { m_ptMouseUp.x = x; m_ptMouseUp.y = y; isChange = TRUE; } CString msg; msg.Format(_T("Pose: (%d, %d)"), m_ptMouseUp.x, m_ptMouseUp.y); std::string str = CFileRecipe::toString(msg); if (isChange) { m_display->ClearWindow(); m_display->DispImage(); } m_display->DispMessage(30, 30, str, "blue", "false"); } void CChipInspectDlg::OnBnClickedButtonGetImageInchip() { // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë UpdateData(TRUE); int nSide = m_combSide.GetCurSel(); DimensionDir eDir = (DimensionDir)nSide; if (!CVisionBufferPro::getIndexImage(eDir, &m_display->GetImage(), m_imageIndex)) return; m_display->ClearWindow(); m_display->DispImage(); } void CChipInspectDlg::InitUiParam(void) { /* code */ m_combSide.InsertString(0, _T("TopA")); m_combSide.InsertString(1, _T("TopB")); m_combSide.InsertString(2, _T("TopC")); m_combSide.InsertString(3, _T("TopD")); m_combSide.InsertString(4, _T("DotA")); m_combSide.InsertString(5, _T("DotB")); m_combSide.InsertString(6, _T("DotC")); m_combSide.InsertString(7, _T("DotD")); m_combSide.SetCurSel(0); } void CChipInspectDlg::OnBnClickedButtonProcessInchip() { // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë UpdateData(TRUE); int nSide = m_combSide.GetCurSel(); DimensionDir eDir = (DimensionDir)nSide; CInChipDotProcess *dot = new CInChipDotProcess(eDir); Point2I ptStart, ptEnd; ptStart.x = m_nMinX; ptStart.y = 0; ptEnd.x = m_nMaxX; ptEnd.y = 1023; dot->m_threshold = m_nEdgeChipThres; dot->Execute(eDir, m_imageIndex, ptStart, ptEnd); delete dot; dot = NULL; }