⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pbdlg.cpp

📁 曲线角点检测的二种算法
💻 CPP
字号:
// pbDlg.cpp : implementation file
//

#include "stdafx.h"
#include "cpd.h"
#include "pbDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CpbDlg dialog



CpbDlg::CpbDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CpbDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CpbDlg)
	m_dmax = 0;
	m_dmin = 0;
	m_alpa = 0.0;
	m_fn = _T("");
	m_n = 0;
	m_w_u = 0.0;
	m_w_6 = 0.0;
	//}}AFX_DATA_INIT
}


void CpbDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CpbDlg)
	DDX_Text(pDX, IDC_EDIT_DMAX, m_dmax);
	DDX_Text(pDX, IDC_EDIT_DMIN, m_dmin);
	DDX_Text(pDX, IDC_EDIT_EALPA, m_alpa);
	DDX_Text(pDX, IDC_EDIT_FN, m_fn);
	DDX_Text(pDX, IDC_EDIT_N, m_n);
	DDX_Text(pDX, IDC_EDIT_W_U, m_w_u);
	DDX_Text(pDX, IDC_EDIT_WEIGTED_6, m_w_6);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CpbDlg, CDialog)
	//{{AFX_MSG_MAP(CpbDlg)
	ON_WM_MOVE()
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_UPDATAS,Onupdateparam)
	ON_MESSAGE(WM_UPVALUES,Onupdatevl)
END_MESSAGE_MAP()
	
/////////////////////////////////////////////////////////////////////////////
// CpbDlg message handlers

BOOL CpbDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();	
	return TRUE;   
}

void CpbDlg::PostNcDestroy() 
{
 	delete this ;
	CDialog::PostNcDestroy();
}

void CpbDlg::Onupdateparam(WPARAM wParam,LPARAM lParam) 
{
	m_pcwr=(CWR *)(wParam) ;  
    if(m_pcwr)
	{
	m_pcwr->get_fn(m_fn);	 
	m_pcwr->get_b(m_w_6);
	m_pcwr->get_u(m_w_u);
	m_pcwr->get_n(m_n);
    m_pcwr->get_alpa(m_alpa);
    m_pcwr->get_dmin(m_dmin); 
	m_pcwr->get_dmax(m_dmax);
	}
	 
	UpdateData(false);// update to board
}

void CpbDlg::Onupdatevl(WPARAM wParam,LPARAM lParam)
{
#define DISP2 10
	int  idx=(int)(wParam);
 	CWnd * pgragh=GetDlgItem(IDC_STATIC_GRAPH) ;
	CDC  * pCDC = pgragh->GetDC(); 
	 
	RECT rsize ;
	pgragh->GetClientRect(&rsize);
	int ox=rsize.right-rsize.left;
	int oy=rsize.bottom-rsize.top;
	   
	int i   ;
	CBrush cBG(RGB(212,208,200));
	CBrush *pOldBrush =NULL;
	pOldBrush=pCDC->SelectObject(&cBG);
	pCDC->Rectangle(&rsize);
	pCDC->SelectObject(pOldBrush);

	double npery=oy/(PI+0.2) ;
	int nperx=ox/20 ;

	POINT po , pt;
    int len=m_pcwr->get_len();
	po.x=ox/2+rsize.left;
	po.y=rsize.bottom-m_pcwr->get_vl(idx)*npery+DISP2;

	CBrush cMayBe(RGB(255,0,0));
	CBrush cCenterN(RGB(0,0,255));
	 
	pCDC->MoveTo(po);
	for(i=1;i<10;i++)
	{
		pt.x=po.x+nperx*i ;
		pt.y=rsize.bottom-m_pcwr->get_vl((idx+i)%len)*npery+DISP2;
		pCDC->LineTo(pt);
		if(m_pcwr->get_vl((idx+i)%len)*180.0/PI<m_alpa)
		{
			pOldBrush=pCDC->SelectObject(&cMayBe);
			pCDC->Ellipse(pt.x-2,pt.y-2,pt.x+2,pt.y+2);
			pCDC->SelectObject(pOldBrush);
		}
		else
		{
			pCDC->Ellipse(pt.x-2,pt.y-2,pt.x+2,pt.y+2);
		}
	}

	pCDC->MoveTo(po);
	for(i=1;i<10;i++)
	{
		pt.x=po.x-nperx*i ;
		pt.y=rsize.bottom-m_pcwr->get_vl((idx-i+len)%len)*npery+DISP2;
		pCDC->LineTo(pt);
		
		if(m_pcwr->get_vl((idx-i+len)%len)*180.0/PI<m_alpa)
		{
			pOldBrush=pCDC->SelectObject(&cMayBe);
			pCDC->Ellipse(pt.x-2,pt.y-2,pt.x+2,pt.y+2);
			pCDC->SelectObject(pOldBrush);
		}
		else
		{
			pCDC->Ellipse(pt.x-2,pt.y-2,pt.x+2,pt.y+2);
		}			
	}

	if(m_pcwr->get_vl(idx)*180.0/PI<m_alpa)
	{
		pOldBrush=pCDC->SelectObject(&cMayBe);
		pCDC->Ellipse(po.x-3,po.y-3,po.x+3,po.y+3);
		pCDC->SelectObject(pOldBrush);
	}
	else
	{
		pOldBrush=pCDC->SelectObject(&cCenterN);
		pCDC->Ellipse(po.x-3,po.y-3,po.x+3,po.y+3);
		pCDC->SelectObject(pOldBrush);
	}

	char str[32];
	
	sprintf(str,"评估值%.3f",m_pcwr->get_vl(idx)*180.0/PI);
	GetDlgItem(IDC_STATIC_INFO)->SetWindowText(str);
	if(idx==1)
		sprintf(str,"%d st",idx) ;
	else if(idx==2)
		sprintf(str,"%d nd",idx) ;
	else if(idx==3)
		sprintf(str,"%d rd",idx) ;
	else
		sprintf(str,"%d th",idx) ;

	GetDlgItem(IDC_STATIC_TEMP)->SetWindowText(str) ;
}

void CpbDlg::OnOK() 
{
	UpdateData(true); 
	//Enable4Button(false);
	//GetDlgItem(IDOK)->EnableWindow(false);

	if(m_pcwr)
	{
	m_pcwr->set_fn(m_fn);
	m_pcwr->set_b(m_w_6);
	m_pcwr->set_u(m_w_u);
	m_pcwr->set_n(m_n);
    m_pcwr->set_alpa(m_alpa);
    m_pcwr->set_dmin(m_dmin); 
	m_pcwr->set_dmax(m_dmax);
	}
	
	::SendMessage(((CFrameWnd*)::AfxGetApp()
						->GetMainWnd())
							->m_hWnd,
					WM_UPDAATEPARAM,
					0,0) ;

		
}

void CpbDlg::OnCancel() 
{
	::SendMessage(((CFrameWnd*)::AfxGetApp()
						->GetMainWnd())
							->m_hWnd,
					WM_COMMAND,
					ID_WK_PARAM,0) ; 

	::SendMessage(((CFrameWnd*)::AfxGetApp()
						->GetMainWnd())
							->m_hWnd,
					WM_COMMAND,
					IDC_REFRESH ,0) ; 
}

void CpbDlg::OnMove(int x, int y) 
{
	CDialog::OnMove(x, y);
	CFrameWnd * pframewnd=((CFrameWnd*)::AfxGetApp()->GetMainWnd()) ;
	if(pframewnd==NULL)
		return ;
	 
	do{
	RECT rmain ;
	RECT rparam ;
	pframewnd->GetWindowRect(&rmain);
	GetWindowRect(&rparam) ;
	POINT pt ;
	pt.x=rparam.left ; pt.y=rparam.top ;
	if(PtInRect(&rmain,pt)) break ;
	pt.x=rparam.left ; pt.y=rparam.bottom;
	if(PtInRect(&rmain,pt)) break ;
	pt.x=rparam.right; pt.y=rparam.top;
	if(PtInRect(&rmain,pt)) break ;
	pt.x=rparam.right; pt.y=rparam.bottom;
	if(PtInRect(&rmain,pt)) break ;
 	return ;
	}while(0) ;
	
 	::PostMessage(pframewnd->m_hWnd,WM_COMMAND,IDC_REFRESH ,0) ;	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -