// LocSetDlg.cpp : ʵÏÖÎļþ // #include "stdafx.h" #include "BlVisionPro.h" #include "LocSetDlg.h" #include "afxdialogex.h" #include "VisionRecipe.h" #include "VisionSetDlg.h" #include "VisionBufferPro.h" #include "SoftVisionApp.h" #include "Bspline.h" // CLocSetDlg ¶Ô»°¿ò IMPLEMENT_DYNAMIC(CLocSetDlg, CDialogEx) CLocSetDlg::CLocSetDlg(CWnd* pParent /*=NULL*/) : CDialogEx(IDD_DIALOG_LOC_SET, pParent) , m_topScore(0.5) , m_botScore(0.5) { m_dot = NULL; m_dotTop = nullptr; m_dotBot = nullptr; m_topMark.x = 0; m_topMark.y = 0; m_botMark.x = 0; m_botMark.y = 0; HalconCpp::GenEmptyObj(&m_dispResultObject.hDispObject); HalconCpp::GenEmptyObj(&m_dispResultObject.hDispObject); } CLocSetDlg::~CLocSetDlg() { m_dispResultObject.hDispObject.Clear(); m_dispResultObject.hDispRegion.Clear(); } void CLocSetDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT_TOP_MARK_X_LOC, m_topMark.x); DDX_Text(pDX, IDC_EDIT_TOP_MARK_Y_LOC, m_topMark.y); DDX_Text(pDX, IDC_EDIT_BOT_MARK_X_LOC, m_botMark.x); DDX_Text(pDX, IDC_EDIT_BOT_MARK_Y_LOC, m_botMark.y); DDX_Text(pDX, IDC_EDIT_TOP_SCORE_LOC, m_topScore); DDX_Text(pDX, IDC_EDIT_BOT_SCORE_LOC, m_botScore); } BEGIN_MESSAGE_MAP(CLocSetDlg, CDialogEx) ON_WM_CLOSE() ON_BN_CLICKED(IDC_BUTTON_SET_POSE_LOC, &CLocSetDlg::OnBnClickedButtonSetPoseLoc) ON_BN_CLICKED(IDC_BUTTON_TOP_REFRESH_LOC, &CLocSetDlg::OnBnClickedButtonTopRefreshLoc) ON_BN_CLICKED(IDC_BUTTON_BOT_REFRESH_LOC, &CLocSetDlg::OnBnClickedButtonBotRefreshLoc) ON_BN_CLICKED(IDC_BUTTON_TOP_DELETE_LOC, &CLocSetDlg::OnBnClickedButtonTopDeleteLoc) ON_BN_CLICKED(IDC_BUTTON_BOT_DELETE_LOC, &CLocSetDlg::OnBnClickedButtonBotDeleteLoc) ON_BN_CLICKED(IDC_BUTTON_EXECUTE_LOC, &CLocSetDlg::OnBnClickedButtonExecuteLoc) ON_BN_CLICKED(IDC_BUTTON_LOCK_LOCK, &CLocSetDlg::OnBnClickedButtonLockLock) ON_BN_CLICKED(IDC_BUTTON_SAVE_LOC, &CLocSetDlg::OnBnClickedButtonSaveLoc) ON_BN_CLICKED(IDC_BUTTON_NORCH, &CLocSetDlg::OnBnClickedButtonNorch) END_MESSAGE_MAP() // CLocSetDlg ÏûÏ¢´¦Àí³ÌÐò void CLocSetDlg::OnClose() { // TODO: ÔÚ´ËÌí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂëºÍ/»òµ÷ÓÃĬÈÏÖµ if (nullptr != m_displayTop) { ClsDisplay_Free(m_displayTop); m_displayTop = nullptr; } if (nullptr != m_displayBot) { ClsDisplay_Free(m_displayBot); m_displayBot = nullptr; } CDialogEx::OnClose(); } BOOL CLocSetDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // TODO: ÔÚ´ËÌí¼Ó¶îÍâµÄ³õʼ»¯ InitDisplay(); m_isLock = TRUE; LockPose(m_isLock); return TRUE; // return TRUE unless you set the focus to a control // Òì³£: OCX ÊôÐÔÒ³Ó¦·µ»Ø FALSE } void CLocSetDlg::LockPose(BOOL isLock){ /* code */ if (isLock) { GetDlgItem(IDC_BUTTON_SET_POSE_LOC)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_LOCK_LOCK)->SetWindowTextW(L"UnLock"); } else { GetDlgItem(IDC_BUTTON_SET_POSE_LOC)->EnableWindow(TRUE); GetDlgItem(IDC_BUTTON_LOCK_LOCK)->SetWindowTextW(L"Lock"); } } int CLocSetDlg::setDimensionDir(DimensionDir eDir) { /* code */ ChangeVisionType(eDir); return 0; } void CLocSetDlg::InitDisplay(void) { /* code */ m_displayTop = ClsDisplay_Create(); if (nullptr != m_displayTop) { CRect rect; CWnd * pDispWnd = GetDlgItem(IDC_STATIC_TOP_IMAGE_LOC); pDispWnd->GetWindowRect(rect); m_displayTop->OpenWindow((__int64)pDispWnd->m_hWnd, rect.Width(), rect.Height()); m_displayTop->SetOperFlag(DEFAULT_OPER_FLAG); m_displayTop->SetDraw("fill", DISP_OBJECT); m_displayTop->SetColor("red", DISP_OBJECT); m_displayTop->SetDraw("fill", DISP_REGION); std::string color = ClsVision::Rgb2Color(255, 0, 0); m_displayTop->SetColor(color, DISP_REGION); m_displayTop->SetDraw("fill", DISP_CROSS); color = ClsVision::Rgb2Color(224, 224, 224); m_displayTop->SetColor(color, DISP_CROSS); m_displayTop->SetDraw("fill", DISP_SELECT); m_displayTop->SetColor("yellow", DISP_SELECT); color = ClsVision::Rgb2Color(0, 0, 100); m_displayTop->SetBackgroundColor(color); } m_displayBot = ClsDisplay_Create(); if (nullptr != m_displayBot) { CRect rect; CWnd * pDispWnd = GetDlgItem(IDC_STATIC_BOT_IMAGE_LOC); pDispWnd->GetWindowRect(rect); m_displayBot->OpenWindow((__int64)pDispWnd->m_hWnd, rect.Width(), rect.Height()); m_displayBot->SetOperFlag(DEFAULT_OPER_FLAG); m_displayBot->SetDraw("fill", DISP_OBJECT); m_displayBot->SetColor("red", DISP_OBJECT); m_displayBot->SetDraw("fill", DISP_REGION); std::string color = ClsVision::Rgb2Color(255, 0, 0); m_displayBot->SetColor(color, DISP_REGION); m_displayBot->SetDraw("fill", DISP_CROSS); color = ClsVision::Rgb2Color(224, 224, 224); m_displayBot->SetColor(color, DISP_CROSS); m_displayBot->SetDraw("fill", DISP_SELECT); m_displayBot->SetColor("yellow", DISP_SELECT); color = ClsVision::Rgb2Color(0, 0, 100); m_displayBot->SetBackgroundColor(color); } } void CLocSetDlg::ChangeVisionType(DimensionDir eDir) { /* code */ SaveLocParams(); LockPose(TRUE); //ÏÔʾµ±Ç°µÄ²ÎÊý m_eDir = eDir; m_dot = CVisionRecipe::getInstance()->getLocProcess(eDir); ShowLocParams(); SaveNccDotProcess(); if (NULL != m_dot) { m_dotTop = m_dot->getDot(0); m_dotBot = m_dot->getDot(1); } ShowNccDotProcess(); } void CLocSetDlg::ShowNccDotProcess(void) { /* code */ if (NULL != m_dotTop) { m_topScore = m_dotTop->m_score; ClsVision::GenEmptyObject(m_displayTop->GetImage()); m_displayTop->SetImage(m_dotTop->getImage()); int width = 0; int height = 0; ClsVision::GetImageSize(m_displayTop->GetImage(), width, height); if (width >= 1 && height >= 1) { m_displayTop->AutoWindowSize(width, height); } if (width >= 1 && height >= 1) { HalconCpp::GenEmptyObj(&m_displayTop->GetRegion()); HalconCpp::HObject hRegion, hRegion1, hRegion2; HalconCpp::GenRegionLine(&hRegion1, 0, 0.5 * (width - 1), height - 1, 0.5 * (width - 1)); HalconCpp::GenRegionLine(&hRegion2, 0.5 * (height - 1), 0, 0.5 * (height - 1), width - 1); HalconCpp::ConcatObj(hRegion1, hRegion2, &hRegion); m_displayTop->SetRegion(hRegion); } m_displayTop->ClearWindow(); m_displayTop->DispImage(); m_displayTop->DispRegion(); } if (NULL != m_dotBot) { m_botScore = m_dotBot->m_score; ClsVision::GenEmptyObject(m_displayBot->GetImage()); m_displayBot->SetImage(m_dotBot->getImage()); int width = 0; int height = 0; ClsVision::GetImageSize(m_displayBot->GetImage(), width, height); if (width >= 1 && height >= 1) { m_displayBot->AutoWindowSize(width, height); } if (width >= 1 && height >= 1) { HalconCpp::GenEmptyObj(&m_displayBot->GetRegion()); HalconCpp::HObject hRegion, hRegion1, hRegion2; HalconCpp::GenRegionLine(&hRegion1, 0, 0.5 * (width - 1), height - 1, 0.5 * (width - 1)); HalconCpp::GenRegionLine(&hRegion2, 0.5 * (height - 1), 0, 0.5 * (height - 1), width - 1); HalconCpp::ConcatObj(hRegion1, hRegion2, &hRegion); m_displayBot->SetRegion(hRegion); } m_displayBot->ClearWindow(); m_displayBot->DispImage(); m_displayBot->DispRegion(); } UpdateData(FALSE); } void CLocSetDlg::SaveNccDotProcess(void) { /* code */ UpdateData(TRUE); if (NULL != m_dotTop) { m_dotTop->m_score = m_topScore; } if (NULL != m_dotBot) { m_dotBot->m_score = m_botScore; } } void CLocSetDlg::ShowLocParams(void) { /* code */ if (DIMENSION_NONE == m_eDir) return; if (NULL == m_dot) return; m_topMark = m_dot->getPose(0); m_botMark = m_dot->getPose(1); UpdateData(FALSE); } void CLocSetDlg::SaveLocParams(void) { /* code */ if (DIMENSION_NONE == m_eDir) return; if (NULL == m_dot) return; UpdateData(TRUE); m_dot->setPose(m_topMark, 0); m_dot->setPose(m_botMark, 1); } void CLocSetDlg::OnBnClickedButtonSetPoseLoc() { // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë CBlSideData *pSideData = CVisionRecipe::getInstance()->getSideData(m_eDir); if (NULL == pSideData) return; if (pSideData->m_bTopMark_Find) { m_topMark = pSideData->m_mTopMark; if (nullptr != m_dot) { m_dot->setPose(m_topMark, 0); } } if (pSideData->m_bBotMark_Find) { m_botMark = pSideData->m_mBotMark; if (NULL != m_dot) { m_dot->setPose(m_botMark, 1); } } UpdateData(FALSE); } void CLocSetDlg::OnBnClickedButtonTopRefreshLoc() { // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë if (NULL == m_dotTop) return; //1. ·¢ËÍÐÅÏ¢ CSoftVisionApp::getInstance()->sendMessage(1, m_eDir); //2. »ñȡλÖÃÐÅÏ¢ int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; if (!CVisionRecipe::getInstance()->getFrame(x1, y1, x2, y2)) return; //½ØÍ¼ HalconCpp::HObject hImage; if (!CVisionBufferPro::getImageROI(m_eDir, hImage, x1, y1, x2, y2)) return; int width = 0; int height = 0; ClsVision::GetImageSize(hImage, width, height); if (width < 1 || height < 1) return; Point2I pose; pose.x = (int)(0.5 * (x1 + x2)); pose.y = (int)(0.5 * (y1 + y2)); m_dotTop->setPose(pose); m_dotTop->setImage(hImage); if (NULL == m_displayTop) return; ShowNccDotProcess(); } void CLocSetDlg::OnBnClickedButtonBotRefreshLoc() { // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë if (NULL == m_dotBot) return; //1. ·¢ËÍÐÅÏ¢ CSoftVisionApp::getInstance()->sendMessage(1, m_eDir); //2. »ñȡλÖÃÐÅÏ¢ int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; if (!CVisionRecipe::getInstance()->getFrame(x1, y1, x2, y2)) return; //½ØÍ¼ HalconCpp::HObject hImage; if (!CVisionBufferPro::getImageROI(m_eDir, hImage, x1, y1, x2, y2)) return; int width = 0; int height = 0; ClsVision::GetImageSize(hImage, width, height); if (width < 1 || height < 1) return; Point2I pose; pose.x = (int)(0.5 * (x1 + x2)); pose.y = (int)(0.5 * (y1 + y2)); m_dotBot->setPose(pose); m_dotBot->setImage(hImage); if (NULL == m_displayBot) return; ShowNccDotProcess(); } void CLocSetDlg::OnBnClickedButtonTopDeleteLoc() { // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë if (NULL == m_dotTop) return; HalconCpp::HObject hImage; HalconCpp::GenEmptyObj(&hImage); m_dotTop->setImage(hImage); ShowNccDotProcess(); } void CLocSetDlg::OnBnClickedButtonBotDeleteLoc() { // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë if (NULL == m_dotBot) return; HalconCpp::HObject hImage; HalconCpp::GenEmptyObj(&hImage); m_dotBot->setImage(hImage); ShowNccDotProcess(); } void CLocSetDlg::OnBnClickedButtonExecuteLoc() { // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë CBlSideData *pSideData = CVisionRecipe::getInstance()->getSideData(m_eDir); if (nullptr != pSideData) { pSideData->m_vDispVisionResult.clear(); } SaveLocParams(); SaveNccDotProcess(); if (NULL == m_dot) return; m_dot->execute(m_eDir); DispAllResult(); } void CLocSetDlg::DispAllResult(void) { /* code */ CSoftVisionApp::getInstance()->sendMessage(2, m_eDir); } void CLocSetDlg::OnBnClickedButtonLockLock() { // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë if (m_isLock) { m_isLock = FALSE; } else { m_isLock = TRUE; } LockPose(m_isLock); } BOOL CLocSetDlg::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 CLocSetDlg::OnBnClickedButtonSaveLoc() { // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë SaveLocParams(); SaveNccDotProcess(); } void CLocSetDlg::OnBnClickedButtonNorch() { // TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë //[INFO] 11 : 21 : 43 : 701 Norch 0 : (1414, 3577), (1358, 3588), (1370, 3586) //[INFO] 11 : 21 : 43 : 701 Norch 1 : (1506, 4215), (1448, 4219), (1460, 4218) //[INFO] 11 : 21 : 43 : 701 Norch 2 : (1521, 4461), (1463, 4464), (1476, 4463) //[INFO] 11 : 21 : 43 : 701 Norch 3 : (1526, 4584), (1468, 4584), (1480, 4584) //[INFO] 11 : 21 : 43 : 701 Norch 4 : (1547, 4668), (1469, 4636), (1482, 4642) //[INFO] 11 : 21 : 43 : 701 Norch 5 : (1546, 4748), (1474, 4740), (1488, 4741) //[INFO] 11 : 21 : 43 : 701 Norch 6 : (1528, 4831), (1469, 4869), (1482, 4860) //[INFO] 11 : 21 : 43 : 701 Norch 7 : (1525, 4951), (1468, 4925), (1481, 4931) //[INFO] 11 : 21 : 43 : 701 Norch 8 : (1511, 5176), (1454, 5171), (1466, 5172) //[INFO] 11 : 21 : 43 : 701 Norch 9 : (1415, 5856), (1359, 5845), (1371, 5847) return; #if 0 Point2D aryPoints[10]; aryPoints[0].x = 1370; aryPoints[0].y = 3586; aryPoints[1].x = 1460; aryPoints[1].y = 4218; aryPoints[2].x = 1476; aryPoints[2].y = 4463; aryPoints[3].x = 1480; aryPoints[3].y = 4584; aryPoints[4].x = 1482; aryPoints[4].y = 4668; aryPoints[5].x = 1488; aryPoints[5].y = 4741; aryPoints[6].x = 1482; aryPoints[6].y = 4831; aryPoints[7].x = 1481; aryPoints[7].y = 4951; aryPoints[8].x = 1466; aryPoints[8].y = 5172; aryPoints[9].x = 1371; aryPoints[9].y = 5847; CRect roiRect; roiRect.left = 1017; roiRect.top = 3456; roiRect.right = 1573; roiRect.bottom = 5970; std::vector vPoints; for (int i = 0; i < 10; i++) { Point2D point = aryPoints[i]; vPoints.push_back(point); } CRect rectResult[100]; int nRet = CVisionBufferPro::findNorchDefect(m_eDir, vPoints, roiRect, 30, 5, 45, 1, 10, 10, rectResult); #endif }