// 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;
|
m_topPoint.x = 0;
|
m_topPoint.y = 0;
|
m_botPoint.x = 0;
|
m_botPoint.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_POINT_X_LOC, m_topPoint.x);
|
DDX_Text(pDX, IDC_EDIT_TOP_POINT_Y_LOC, m_topPoint.y);
|
DDX_Text(pDX, IDC_EDIT_BOT_POINT_X_LOC, m_botPoint.x);
|
DDX_Text(pDX, IDC_EDIT_BOT_POINT_Y_LOC, m_botPoint.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_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_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();
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
// Òì³£: OCX ÊôÐÔÒ³Ó¦·µ»Ø FALSE
|
}
|
|
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();
|
|
//ÏÔʾµ±Ç°µÄ²ÎÊý
|
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);
|
m_topPoint = m_dot->getPose(2);
|
m_botPoint = m_dot->getPose(3);
|
|
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::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);
|
|
//¼ÆËãλÖÃÐÅÏ¢
|
CBlSideData *pSideData = CVisionRecipe::getInstance()->getSideData(m_eDir);
|
if (nullptr != pSideData) {
|
Point2I stdPoint = pose;
|
m_topPoint = stdPoint;
|
m_dot->setPose(stdPoint, 2);
|
if (pSideData->m_bTopMark_Find) {
|
stdPoint = pSideData->m_mTopMark;
|
m_topMark = stdPoint;
|
m_dot->setPose(stdPoint, 0);
|
}
|
}
|
|
if (NULL == m_displayTop) return;
|
|
ShowLocParams();
|
|
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);
|
|
//¼ÆËãλÖÃÐÅÏ¢
|
CBlSideData* pSideData = CVisionRecipe::getInstance()->getSideData(m_eDir);
|
if (nullptr != pSideData) {
|
Point2I stdPoint = pose;
|
m_botPoint = stdPoint;
|
m_dot->setPose(stdPoint, 3);
|
if (pSideData->m_bBotMark_Find) {
|
stdPoint = pSideData->m_mBotMark;
|
m_botMark = stdPoint;
|
m_dot->setPose(stdPoint, 1);
|
}
|
}
|
|
if (NULL == m_displayBot) return;
|
|
ShowLocParams();
|
|
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);
|
}
|
|
|
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<Point2D> 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
|
}
|