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

📄 ydpdview.cpp

📁 可以对连续和离散2种线性系统运动的状态、输出响应实现符号计算和数值计算2种运动轨迹分析,系统可以是SISO的
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// ydpdView.cpp : implementation of the CYdpdView class
//

#include "stdafx.h"
#include "ydpd.h"

#include "ydpdDoc.h"
#include "ydpdView.h"
#include "DIB.h"
#include "Track.h"
#include "ydgj.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


/////////////////////////////////////////////////////////////////////////////
// CYdpdView
DIB cDib;
extern HANDLE hDIBBK1;
extern HANDLE hDIBBK2;
extern HANDLE hDIBBKGray;
extern HANDLE hDIBBKGradient;
HANDLE hDIBCurrent = NULL;
CPoint ImportantPoint,ImportantPoint2,ImpPoiCur;
CPoint ImportantPointSecond;
int ImportantColorInfo[RADIUS*2+1][RADIUS*2+1][3];
int locax,locay;

IMPLEMENT_DYNCREATE(CYdpdView, CScrollView)

BEGIN_MESSAGE_MAP(CYdpdView, CScrollView)
	//{{AFX_MSG_MAP(CYdpdView)
	ON_COMMAND(ID_MENU_BK_FIRST, OnMenuBkFirst)
	ON_COMMAND(ID_MENU_BK_SECOND, OnMenuBkSecond)
	ON_COMMAND(ID_MENU_BK_GRAY, OnMenuBkGray)
	ON_COMMAND(ID_MENU_GRADIENT, OnMenuGradient)
	ON_COMMAND(ID_MENU_PIPEIZHONGXIN, OnMenuPipeizhongxin)
	ON_COMMAND(ID_MENU_TEZHENGQUYU, OnMenuTezhengquyu)
	ON_COMMAND(ID_MENU_PIPEI, OnMenuPipei)
	ON_COMMAND(ID_MEDIFILTER, OnMedifilter)
	ON_COMMAND(ID_MENU_FILElOAD, OnMENUFILElOAD)
	ON_COMMAND(ID_MENU_YDPD_PIPEI, OnMenuYdpdPipei)
	ON_COMMAND(ID_MENU_YDPD_MEDI, OnMenuYdpdMedi)
	ON_COMMAND(ID_MENU_YDPD_LKTQ, OnMenuYdpdLktq)
	ON_COMMAND(ID_MENU_YDPD_EDGE_GET, OnMenuYdpdEdgeGet)
	ON_COMMAND(ID_MENU_YDPD_BLACKWHITE, OnMenuYdpdBlackwhite)
	ON_COMMAND(ID_MENU_YDPD_THING, OnMenuYdpdThing)
	ON_COMMAND(ID_MENU_YDPD_DELETESCATER, OnMenuYdpdDeletescater)
	ON_COMMAND(ID_MENU_YDPD_GUIJI, OnMenuYdpdGuiji)
	ON_COMMAND(ID_MENU_YDPD_CENTER, OnMenuYdpdCenter)
	ON_COMMAND(ID_MENU_YCX, OnMenuYcx)
	ON_COMMAND(ID_SECOND_PIPEI, OnSecondPipei)
	ON_COMMAND(ID_MENU_PENGZHANG, OnMenuPengzhang)
	ON_COMMAND(ID_MENU_GETEDGE, OnMenuGetedge)
	ON_COMMAND(ID_MENU_YDPD_GRAY, OnMenuYdpdGray)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CYdpdView construction/destruction

CYdpdView::CYdpdView()
{
	hDIBBK1 = NULL;
	hDIBBK2 = NULL;
	hDIBBKGray = NULL;
	hDIBBKGradient = NULL;
	isTeZhengZhi = false;
	isBKChonsen = false;
	m_Pointnum =0;

}

CYdpdView::~CYdpdView()
{
}

BOOL CYdpdView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CYdpdView drawing

void CYdpdView::OnDraw(CDC* pDC)
{
	CYdpdDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	if(hDIBBK1 && hDIBBKGray== NULL)
		cDib.PaintDIBTrue(pDC->GetSafeHdc(),CRect(0,0,m_bk_first_width,m_bk_first_height),
		hDIBBK1,CRect(0,0,m_bk_first_width,m_bk_first_height),SRCCOPY);
	if(hDIBBKGray && hDIBBKGradient == NULL)
		cDib.PaintDIBTrue(pDC->GetSafeHdc(),CRect(0,0,m_bk_first_width,m_bk_first_height),
		hDIBBKGray,CRect(0,0,m_bk_first_width,m_bk_first_height),SRCCOPY);
	if(hDIBBKGradient)
		cDib.PaintDIBTrue(pDC->GetSafeHdc(),CRect(0,0,m_bk_first_width,m_bk_first_height),
		hDIBBKGradient,CRect(0,0,m_bk_first_width,m_bk_first_height),SRCCOPY);
	if(hDIBBK2)
	{		SetScrollSizes(MM_TEXT,CSize(m_bk_first_width*2+20,m_bk_first_height*2+10));	
		//SetScrollSizes(MM_TEXT,CSize(m_bk_first_width*2+20,m_bk_first_height));
		cDib.PaintDIBTrue(pDC->GetSafeHdc(),CRect(m_bk_first_width+5,0,m_bk_first_width*2+5,m_bk_first_height),
		hDIBBK2,CRect(0,0,m_bk_first_width,m_bk_first_height),SRCCOPY);
	}
	if(hDIBCurrent)
	{
		cDib.PaintDIBTrue(pDC->GetSafeHdc(),CRect(m_bk_first_width+5,m_bk_first_height+5,m_bk_first_width*2+5,m_bk_first_height*2+5),
		hDIBCurrent,CRect(0,0,m_bk_first_width,m_bk_first_height),SRCCOPY);
		SetScrollSizes(MM_TEXT,CSize(m_bk_first_width*2+20,m_bk_first_height*2+10));
	}
	if(this->isTeZhengZhi)
		cDib.PaintDIBTrue(pDC->GetSafeHdc(),CRect(0,m_bk_first_height+10,RADIUS*2+1,m_bk_first_height+10+RADIUS*2+1),
		hDIBBK1,CRect(ImportantPoint.x-RADIUS,m_bk_first_height -ImportantPoint.y-RADIUS,ImportantPoint.x+RADIUS,m_bk_first_height -ImportantPoint.y +RADIUS),SRCCOPY);
		
}

void CYdpdView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

	CSize sizeTotal;
	// TODO: calculate the total size of this view
	sizeTotal.cx = sizeTotal.cy = 100;
	SetScrollSizes(MM_TEXT, sizeTotal);
}

/////////////////////////////////////////////////////////////////////////////
// CYdpdView printing

BOOL CYdpdView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CYdpdView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CYdpdView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CYdpdView diagnostics

#ifdef _DEBUG
void CYdpdView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CYdpdView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CYdpdDoc* CYdpdView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CYdpdDoc)));
	return (CYdpdDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CYdpdView message handlers

void CYdpdView::OnMenuBkFirst() 
{
	
	CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,NULL);
	if(dlg.DoModal() == IDOK)
	{
		CString a;
		a = dlg.GetPathName();
		hDIBBK1 = cDib.LoadDIB(a);
		if(!hDIBBK1)
		{	
			AfxMessageBox("open file error");
			return;
		}
		LPBITMAPINFOHEADER lpbi;
		lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIBBK1);
		this->m_bk_first_width = lpbi->biWidth;
		this->m_bk_first_height = lpbi->biHeight;
		GlobalUnlock(hDIBBK1);
		Invalidate();
	}

}

void CYdpdView::OnMenuBkSecond() 
{
	CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,NULL);
	if(dlg.DoModal() == IDOK)
	{
		hDIBBK2 = cDib.LoadDIB(dlg.GetPathName());
		if(!hDIBBK2)
		{	
			AfxMessageBox("open file error");
			return;
		}
			
		Invalidate();
	}
	
}

void CYdpdView::OnMenuBkGray() 
{
	hDIBBKGray = cDib.ToGray(hDIBBK1);
	Invalidate();
	
}

void CYdpdView::OnMenuGradient() 
{
	hDIBBKGradient = cDib.Gradient(hDIBBKGray);
	Invalidate();
	
}

void CYdpdView::OnMenuPipeizhongxin() 
{
	cDib.LocateImporntPoint(hDIBBKGradient,RADIUS,&ImportantPoint);
	Invalidate();
	
}

void CYdpdView::OnMenuTezhengquyu() 
{

	long  lOffset;
	WORD wBytesPerLine;
	LPBYTE lpData;
	GlobalLock(hDIBBK1);
	wBytesPerLine = cDib.BytePerLine(hDIBBK1);
	lpData = cDib.FindDIBBits(hDIBBK1);
	for(int i=-RADIUS;i<=RADIUS;i++)
		for(int j=-RADIUS;j<=RADIUS;j++)
		{
			lOffset = cDib.PixelOffset(i+ImportantPoint.y,j+ImportantPoint.x,wBytesPerLine);
			ImportantColorInfo[i+RADIUS][j+RADIUS][0] = *(lpData+lOffset++);
			ImportantColorInfo[i+RADIUS][j+RADIUS][1] = *(lpData+lOffset++);
			ImportantColorInfo[i+RADIUS][j+RADIUS][2] = *(lpData+lOffset++);
		}
	this->isTeZhengZhi = true;
	GlobalUnlock(hDIBBK1);
	Invalidate();
}

void CYdpdView::OnMenuPipei() 
{
	cDib.MatchImportantPoint(hDIBBK2,ImportantColorInfo,&ImportantPoint2);
	if(cDib.ComPareImg(hDIBBK1,hDIBBK2,ImportantPoint,ImportantPoint2))
	{
		AfxMessageBox("match successed");
		this->isBKChonsen = true;
	}
	else
		AfxMessageBox("match failed");
	Invalidate();
}

void CYdpdView::OnMedifilter() 
{	
	
	if(hDIBBK1)
		cDib.MedianFilterDIB(hDIBBK1);
	if(hDIBBK2)
		cDib.MedianFilterDIB(hDIBBK2);
	Invalidate();
}



void CYdpdView::OnMENUFILElOAD() 
{
	CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,NULL);
	if(dlg.DoModal() == IDOK)
	{
		CString a;
		a = dlg.GetPathName();
		hDIBCurrent = cDib.LoadDIB(a);
		if(!hDIBCurrent)
		{	
			AfxMessageBox("open file error");
			return;
		}
			
	
	}
	
}

void CYdpdView::OnMenuYdpdPipei() 
{
	bool kk = cDib.MatchImportantPoint(hDIBCurrent,ImportantColorInfo,&ImportantPoint2);
	
	if(cDib.ComPareImg(hDIBBK1,hDIBCurrent,ImportantPoint,ImportantPoint2))
	{
		AfxMessageBox("match successed");
		this->isBKChonsen = true;
	}
	else
		AfxMessageBox("match failed");
		
	Invalidate();
	
}

void CYdpdView::OnMenuYdpdMedi() 
{
	if(hDIBCurrent)
	{
		cDib.MedianFilterDIB(hDIBCurrent);
		Invalidate();
	}

	
}

void CYdpdView::OnMenuYdpdLktq() 
{

	cDib.CompareImg2(hDIBBK1,hDIBCurrent,ImportantPoint,ImportantPoint2);
	LPBITMAPFILEHEADER lpbi;
	lpbi = (LPBITMAPFILEHEADER)GlobalLock(hDIBCurrent);
	LPBYTE lpData = cDib.FindDIBBits(hDIBCurrent);
	long lOffset;
	WORD wBytesPerLine = cDib.BytePerLine(hDIBCurrent);
	
	for(int i= -RADIUS;i<=RADIUS;i++)
		{
			lOffset = cDib.PixelOffset(i+ImportantPoint2.y,RADIUS+ImportantPoint2.x,wBytesPerLine);
			*(lpData+lOffset++) = 0;
			*(lpData+lOffset++) = 0;
			*(lpData+lOffset++) = 0;
		}
	for( i= -RADIUS;i<=RADIUS;i++)
		{
			lOffset = cDib.PixelOffset(i+ImportantPoint2.y,ImportantPoint2.x-RADIUS,wBytesPerLine);
			*(lpData+lOffset++) = 0;
			*(lpData+lOffset++) = 0;
			*(lpData+lOffset++) = 0;
		}
	for( i= -RADIUS;i<=RADIUS;i++)
		{
			lOffset = cDib.PixelOffset(ImportantPoint2.y-RADIUS,i+ImportantPoint2.x,wBytesPerLine);
			*(lpData+lOffset++) = 0;
			*(lpData+lOffset++) = 0;
			*(lpData+lOffset++) = 0;
		}
	for( i= -RADIUS;i<=RADIUS;i++)
		{
			lOffset = cDib.PixelOffset(RADIUS+ImportantPoint2.y,i+ImportantPoint2.x,wBytesPerLine);
			*(lpData+lOffset++) = 0;
			*(lpData+lOffset++) = 0;
			*(lpData+lOffset++) = 0;
		}
	GlobalUnlock(hDIBCurrent);
	Invalidate();
}

void CYdpdView::OnMenuYdpdEdgeGet() 
{	
	
	LPBITMAPINFOHEADER lpbi;
	int width ,height;
	WORD wBytesPerLine ;
	LPBYTE lpData;
	long lOffset;
	lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIBCurrent);
	width = lpbi->biWidth;
	height = lpbi->biHeight;
	wBytesPerLine = cDib.BytePerLine(hDIBCurrent);
	lpData = cDib.FindDIBBits(hDIBCurrent);
	for(int i =0;i<height;i++)
		for(int j=0;j<width;j++)
		{
			 lOffset = cDib.PixelOffset(i,j,wBytesPerLine);
			*(lpData+lOffset) =(*(lpData+lOffset))*5; 
			*(lpData+lOffset+1) =(*(lpData+lOffset+1))*5;
			*(lpData+lOffset+2) =(*(lpData+lOffset+2))*5;
		}
		GlobalUnlock(hDIBCurrent);
	hDIBCurrent = cDib.Gradient(hDIBCurrent);
	lpData = cDib.FindDIBBits(hDIBCurrent);
	for(i =0;i<height;i++)
		{
			lOffset = cDib.PixelOffset(i,0,wBytesPerLine);
			*(lpData+lOffset++) =0;
			*(lpData+lOffset++) =0;
			*(lpData+lOffset++) =0;
		}

		for(i =0;i<height;i++)
		{
			lOffset = cDib.PixelOffset(i,width-1,wBytesPerLine);
			*(lpData+lOffset++) =0;
			*(lpData+lOffset++) =0;
			*(lpData+lOffset++) =0;
		}
		for(i =0;i<width;i++)
		{
			lOffset = cDib.PixelOffset(height-1,i,wBytesPerLine);
			*(lpData+lOffset++) =0;
			*(lpData+lOffset++) =0;
			*(lpData+lOffset++) =0;
		}
		for(i =0;i<width;i++)
		{
			lOffset = cDib.PixelOffset(0,i,wBytesPerLine);
			*(lpData+lOffset++) =0;
			*(lpData+lOffset++) =0;
			*(lpData+lOffset++) =0;
		}
	Invalidate();
	
}

void CYdpdView::OnMenuYdpdBlackwhite() 
{
	cDib.WhiteBlack(hDIBCurrent,110);
	LPBITMAPINFOHEADER lpbi;
	int width ,height;
	WORD wBytesPerLine ;
	LPBYTE lpData;
	long lOffset;
	lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIBCurrent);
	width = lpbi->biWidth;
	height = lpbi->biHeight;
	wBytesPerLine = cDib.BytePerLine(hDIBCurrent);
	lpData = cDib.FindDIBBits(hDIBCurrent);
		for(int i =0;i<height;i++)
		{
			lOffset = cDib.PixelOffset(i,0,wBytesPerLine);
			*(lpData+lOffset++) =0;
			*(lpData+lOffset++) =0;
			*(lpData+lOffset++) =0;
		}

		for(i =0;i<height;i++)
		{
			lOffset = cDib.PixelOffset(i,width-1,wBytesPerLine);
			*(lpData+lOffset++) =0;
			*(lpData+lOffset++) =0;
			*(lpData+lOffset++) =0;
		}
		for(i =0;i<width;i++)
		{
			lOffset = cDib.PixelOffset(height-1,i,wBytesPerLine);
			*(lpData+lOffset++) =0;
			*(lpData+lOffset++) =0;
			*(lpData+lOffset++) =0;
		}
		for(i =0;i<width;i++)

⌨️ 快捷键说明

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