// GrindSetDlg.cpp : ʵÏÖÎļþ // #include "stdafx.h" #include "BlVisionPro.h" #include "GrindSetDlg.h" #include "afxdialogex.h" #include "VisionRecipe.h" #include "VisionSetDlg.h" #include "VisionBufferPro.h" #include "SoftVisionApp.h" // CGrindSetDlg ¶Ô»°¿ò IMPLEMENT_DYNAMIC(CGrindSetDlg, CDialogEx) CGrindSetDlg::CGrindSetDlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_DIALOG_GRIND_SET, pParent) , m_nLeftLineDist(0) , m_nLeftThres(20) { m_dot = NULL; m_eDir = DIMENSION_NONE; } CGrindSetDlg::~CGrindSetDlg() { } void CGrindSetDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_PANEL_GRIND_INFO, m_PanelGrind); DDX_Text(pDX, IDC_EDIT_LEFT_LINE_DISTANCE, m_nLeftLineDist); DDX_Text(pDX, IDC_EDIT_LEFT_LINE_THRES_GRIND, m_nLeftThres); } BEGIN_MESSAGE_MAP(CGrindSetDlg, CDialogEx) ON_WM_CLOSE() ON_BN_CLICKED(IDC_BUTTON_PROCESS_GRIND, &CGrindSetDlg::OnBnClickedButtonProcessGrind) ON_BN_CLICKED(IDC_BUTTON_SAVE_GRIND, &CGrindSetDlg::OnBnClickedButtonSaveGrind) END_MESSAGE_MAP() // CGrindSetDlg ÏûÏ¢´¦Àí³ÌÐò BOOL CGrindSetDlg::PreTranslateMessage(MSG* pMsg) { // TODO: ÔÚ´ËÌí¼ÓרÓôúÂëºÍ/»òµ÷ÓûùÀà if (pMsg->message == WM_KEYDOWN) { if ((pMsg->wParam == VK_RETURN) || (pMsg->wParam == VK_ESCAPE)) { return TRUE; } } return CDialogEx::PreTranslateMessage(pMsg); } void CGrindSetDlg::OnClose() { // TODO: ÔÚ´ËÌí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂëºÍ/»òµ÷ÓÃĬÈÏÖµ // SaveGrindParam(); CDialogEx::OnClose(); } BOOL CGrindSetDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // TODO: ÔÚ´ËÌí¼Ó¶îÍâµÄ³õʼ»¯ InitPanel(); m_eDir = DIMENSION_NONE; return TRUE; // return TRUE unless you set the focus to a control // Òì³£: OCX ÊôÐÔÒ³Ó¦·µ»Ø FALSE } void CGrindSetDlg::InitPanel(void) { /* code */ m_vParams.clear(); CString strText; //1. ID strText = _T("ID."); m_vParams.push_back(strText); //2. Name strText = _T("Name"); m_vParams.push_back(strText); //3. use strText = _T("use"); m_vParams.push_back(strText); //4. Pose Type strText = _T("Pos Type"); m_vParams.push_back(strText); //5. Pose Y strText = _T("Top Y(um)"); m_vParams.push_back(strText); //6. End Thres strText = _T("End Thres"); m_vParams.push_back(strText); // 7. Inc strText = _T("Inc(um)"); m_vParams.push_back(strText); // 8.Min strText = _T("Min(um)"); m_vParams.push_back(strText); // 9.Min strText = _T("Max(um)"); m_vParams.push_back(strText); // 10.Result strText = _T("Result(um)"); m_vParams.push_back(strText); int nRows = 51; int nCols = (int)(m_vParams.size()); int nFixRows = 1; int nFixCols = 0; int nRowIdx = 0; int nColIdx = 0; m_PanelGrind.DeleteAllItems(); m_PanelGrind.SetVirtualMode(FALSE); m_PanelGrind.GetDefaultCell(TRUE, FALSE)->SetBackClr(_gGridFixCellColor); m_PanelGrind.GetDefaultCell(FALSE, TRUE)->SetBackClr(_gGridFixCellColor); m_PanelGrind.GetDefaultCell(FALSE, FALSE)->SetBackClr(_gGridCellColor); m_PanelGrind.SetFixedTextColor(_gGridFixFontColor); m_PanelGrind.SetRowCount(nRows); m_PanelGrind.SetColumnCount(nCols); m_PanelGrind.SetFixedRowCount(nFixRows); m_PanelGrind.SetFixedColumnCount(nFixCols); CFont *pFont = m_PanelGrind.GetFont(); if (pFont) { LOGFONT lf; pFont->GetLogFont(&lf); lf.lfItalic = 0; lf.lfHeight = 14; lf.lfWeight = FW_BOLD; _tcscpy_s(lf.lfFaceName, _T("Malgun Gothic")); m_PanelGrind.GetDefaultCell(FALSE, TRUE)->SetFont(&lf); m_PanelGrind.GetDefaultCell(TRUE, FALSE)->SetFont(&lf); m_PanelGrind.GetDefaultCell(FALSE, FALSE)->SetFont(&lf); m_PanelGrind.GetDefaultCell(TRUE, TRUE)->SetFont(&lf); } // Col for (int i = 0; i < nCols; i++) { if (1 == i) { m_PanelGrind.SetColumnWidth(nColIdx, 115); } else if (0 == i) { m_PanelGrind.SetColumnWidth(nColIdx, 50); } else { m_PanelGrind.SetColumnWidth(nColIdx, 75); } strText = m_vParams[i]; m_PanelGrind.SetItemText(nRowIdx, nColIdx++, strText); } for (int i = 1; i < nRows; i++){ m_PanelGrind.GetCell(i, 0)->SetState(GVIS_READONLY); } } void CGrindSetDlg::setDimensionDir(DimensionDir eDir) { /* code */ ChangeVisionType(eDir); } void CGrindSetDlg::ChangeVisionType(DimensionDir eDir) { /* code */ SaveGrindParam(); m_eDir = eDir; m_dot = CVisionRecipe::getInstance()->getGrindProcess(eDir); ShowGrindParam(); } void CGrindSetDlg::SaveGrindParam(void) { /* code */ if (DIMENSION_NONE == m_eDir) return; if (NULL == m_dot) return; UpdateData(TRUE); { CButton *pBtnUse = (CButton*)(GetDlgItem(IDC_CHECK_USE_GRIND)); int iUse = pBtnUse->GetCheck(); m_dot->m_isUse = (1 == iUse); } m_dot->m_nLeftLineDist = m_nLeftLineDist; m_dot->m_nLeftThres = m_nLeftThres; CString strText; for (int i = 0; i < 50; i++) { CGrindDotProcess *dot = m_dot->m_dots[i]; if (NULL == dot) continue; //1. ID int idRow = dot->getID(); int idx = 0; strText = m_PanelGrind.GetItemText(idRow, idx); idx += 1; //2. Name strText = m_PanelGrind.GetItemText(idRow, idx); dot->m_strName = strText; idx += 1; //3. Use strText = m_PanelGrind.GetItemText(idRow, idx); dot->m_nUse = _wtoi(strText); idx += 1; //4. Pos Type strText = m_PanelGrind.GetItemText(idRow, idx); dot->m_poseType = _wtoi(strText); idx += 1; //5. Pose Y strText = m_PanelGrind.GetItemText(idRow, idx); dot->m_nPosY = _wtoi(strText); idx += 1; //6. Edge Pose strText = m_PanelGrind.GetItemText(idRow, idx); dot->m_nEdgeThres = _wtoi(strText); idx += 1; //7. Inc strText = m_PanelGrind.GetItemText(idRow, idx); dot->m_nInc = _wtoi(strText); idx += 1; //8. Min strText = m_PanelGrind.GetItemText(idRow, idx); dot->m_nMin = _wtoi(strText); idx += 1; //9. Max strText = m_PanelGrind.GetItemText(idRow, idx); dot->m_nMax = _wtoi(strText); idx += 1; } } void CGrindSetDlg::ShowGrindParam(void) { /* code */ if (DIMENSION_NONE == m_eDir) return; if (NULL == m_dot) return; { CButton *pBtnUse = (CButton*)(GetDlgItem(IDC_CHECK_USE_GRIND)); int iUse = 0; if (m_dot->m_isUse) iUse = 1; pBtnUse->SetCheck(iUse); } m_nLeftLineDist = m_dot->m_nLeftLineDist; m_nLeftThres = m_dot->m_nLeftThres; CString strText; for (int i = 0; i < 50; i++) { CGrindDotProcess *dot = m_dot->m_dots[i]; if (NULL == dot) continue; //1. ID int idRow = dot->getID(); int idx = 0; strText.Format(_T("%d"), dot->getID()); m_PanelGrind.SetItemText(idRow, idx, strText); idx += 1; //2. Name strText = dot->m_strName; m_PanelGrind.SetItemText(idRow, idx, strText); idx += 1; //3. USE strText.Format(_T("%d"), dot->m_nUse); m_PanelGrind.SetItemText(idRow, idx, strText); idx += 1; //4. Pos Type strText.Format(_T("%d"), dot->m_poseType); m_PanelGrind.SetItemText(idRow, idx, strText); idx += 1; //5. Pose Y strText.Format(_T("%d"), dot->m_nPosY); m_PanelGrind.SetItemText(idRow, idx, strText); idx += 1; //6. Edge Pose strText.Format(_T("%d"), dot->m_nEdgeThres); m_PanelGrind.SetItemText(idRow, idx, strText); idx += 1; //7. Inc strText.Format(_T("%d"), dot->m_nInc); m_PanelGrind.SetItemText(idRow, idx, strText); idx += 1; //8. Min strText.Format(_T("%d"), dot->m_nMin); m_PanelGrind.SetItemText(idRow, idx, strText); idx += 1; //9. Max strText.Format(_T("%d"), dot->m_nMax); m_PanelGrind.SetItemText(idRow, idx, strText); idx += 1; //10. Result strText.Format(_T("%.1f"), dot->m_distResult); m_PanelGrind.SetItemText(idRow, idx, strText); idx += 1; } UpdateData(FALSE); } void CGrindSetDlg::OnBnClickedButtonProcessGrind() { // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë CBlSideData *pSideData = CVisionRecipe::getInstance()->getSideData(m_eDir); if (nullptr != pSideData) { pSideData->m_vDispVisionResult.clear(); } SaveGrindParam(); if (NULL == m_dot) return; m_dot->Execute(m_eDir); DispAllResult(); } void CGrindSetDlg::DispAllResult(void) { /* code */ int nCount = 50; for (int i = 0; i < 50; i++) { CGrindDotProcess *dot = m_dot->m_dots[i]; if (NULL == dot) continue; bool isDo = true; if (1 != dot->m_nUse) isDo = false; if (!isDo) { int id = dot->getID(); m_PanelGrind.SetItemText(id, 9, _T("NAN")); } else{ //ÏÔʾ½á¹û CString strResult; strResult.Format(_T("%.1f"), dot->m_distResult); int id = dot->getID(); m_PanelGrind.SetItemText(id, 9, strResult); } } CSoftVisionApp::getInstance()->sendMessage(2, m_eDir); m_PanelGrind.Invalidate(FALSE); } void CGrindSetDlg::OnBnClickedButtonSaveGrind() { // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë SaveGrindParam(); }