亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? curversimpleview.cpp

?? 用兩種輸入曲線的方式和獲取點的方法
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// CurverSimpleView.cpp : implementation of the CCurverSimpleView class
//

#include "stdafx.h"
#include "CurverSimple.h"

#include "CurverSimpleDoc.h"
#include "CurverSimpleView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CCurverSimpleView

IMPLEMENT_DYNCREATE(CCurverSimpleView, CView)

BEGIN_MESSAGE_MAP(CCurverSimpleView, CView)
	//{{AFX_MSG_MAP(CCurverSimpleView)
	ON_COMMAND(ID_DATAIMPORT, OnDataimport)
	ON_WM_SIZE()
	ON_WM_CREATE()
	ON_WM_DESTROY()
	ON_WM_LBUTTONDOWN()
	ON_COMMAND(ID_DOUGLAS_PEUKER, OnDouglasPeuker)
	ON_COMMAND(ID_CLEAR, OnClear)
	ON_COMMAND(ID_DRAWNEWLINE, OnDrawnewline)
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONUP()
	ON_COMMAND(ID_JUAGEDISTANCE, OnJuagedistance)
	ON_COMMAND(ID_JUAGEPOINTINOROUT, OnJuagepointinorout)
	ON_COMMAND(ID_DISPLAY_RESULT, OnDisplayResult)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCurverSimpleView construction/destruction

CCurverSimpleView::CCurverSimpleView()
{
	// TODO: add construction code here
	m_bDraw=FALSE;
	m_MouseDown=FALSE;
	FlagEnd=0;
	m_MouseDownNum=0;
	m_display=FALSE;
	m_newdraw=FALSE;
	m_PtInTriangle=0;
}
CCurverSimpleView::~CCurverSimpleView()
{
}

BOOL CCurverSimpleView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	cs.style|=WS_CLIPSIBLINGS|WS_CLIPCHILDREN;
	return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CCurverSimpleView drawing

void CCurverSimpleView::OnDraw(CDC* pDC)
{
	CCurverSimpleDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	wglMakeCurrent(pDC->GetSafeHdc(),m_hglrc);//該語句要放在以下兩句的下面
	glClearColor(1.0,1.0,1.0,0);
	glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
	GLDraw();
	/*if(m_display)
		display(selectedpoints);*/
	wglMakeCurrent(pDC->GetSafeHdc(),NULL);
	SwapBuffers(pDC->GetSafeHdc());
}
/////////////////////////////////////////////////////////////////////////////
// CCurverSimpleView printing
BOOL CCurverSimpleView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}
void CCurverSimpleView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

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

#ifdef _DEBUG
void CCurverSimpleView::AssertValid() const
{
	CView::AssertValid();
}
void CCurverSimpleView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

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

void CCurverSimpleView::OnDataimport() 
{
	// TODO: Add your command handler code here	
	CFileDialog filedlg(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"DAT FILE(*.dat)|*.dat|ALL FILE(*.*)");
	if (filedlg.DoModal() == IDCANCEL)
		return;
	CString filename;
	filename=filedlg.GetPathName();
	CStdioFile myfile(filename,CFile::modeRead);//得到數據流
	long		total;
	total = myfile.GetLength();//得到數據流的長度
	CString		str;
	int			pos;
	int count=0;
	Orignpoint point;
	//讀取每一行的數據
   while(myfile.GetPosition()!=total)
   {
	   myfile.ReadString(str);
	   str.TrimLeft();
	   pos=str.Find(",");
	   point.pointID=atoi(str.Left(pos));//ID從0開始 
	   str=str.Mid(pos+1);//從pos+1起取所有的字符 
	   pos=str.Find(",");
	   point.pointofxy.x=atof(str.Left(pos));//從0開始取字符到pos位置
	   str=str.Mid(pos+1);
	   point.pointofxy.y=atof(str);
	   point.usedFlag=0;//未使用過用0表示
	   OrignVS.push_back(point);
   }
   Invalidate(false);
   for(int i=0;i<OrignVS.size();i++)
   {
	   array[i][0]=OrignVS[i].pointofxy.x/100.0;
	   array[i][1]=OrignVS[i].pointofxy.y/100.0;
	   array[i][2]=0.0;
   }
   m_bDraw=TRUE;
}
void CCurverSimpleView::InitPara()
{
	/*void glMap1{fd}(GLenum target,TYPE u1,TYPE u2,GLint stride, GLint order,const TYPE *points);
	函數的第一個參數target指出控制頂點的意義以及在參數points中需要提供多少值,
   參數points指針可以指向控制點集、RGBA顏色值或紋理坐標串等。
  參數u1和u2,指明變量U的范圍,U一般從0變化到1。參數stride是跨度
   ,表示在每塊存儲區內浮點數或雙精度數的個數,即兩個控制點間的偏移量,
   比如上例中的控制點集ctrpoint[4][3]的跨度就為3,即單個控制點的坐標元素個數。函數參數order是次數加1,
   叫階數,與控制點數一致。*/
	glMap1f(GL_MAP1_VERTEX_3,0.0,1.0,3,13,&array[0][0]);
	glEnable(GL_MAP1_VERTEX_3);
	glShadeModel(GL_FLAT);
}
/*void CCurverSimpleView::GLDrawPoint(CPoint pt)
{
	if(m_MouseDown)
	{
		glPointSize(4);
	glBegin(GL_POINTS);
	glColor3f(0.f,1.f,0.f);
	glVertex2f(GLfloat(pt.x/100.0),GLfloat(pt.y/100.0));
	}
	return;
}*/
void CCurverSimpleView::GLDraw()
{
	if(!m_bDraw)
		return;
	InitPara();
	glLineWidth(3);		
	for(int i=0;i<OrignVS.size();i++)
	{
		glBegin(GL_LINE_STRIP);
		glColor3f(1.f,0.f,0.f);
		//glVertex2f(OrignVS[i].pointofxy.x/100,OrignVS[i].pointofxy.y/100);
		 //glEvalCoord2f(OrignVS[i].pointofxy.x/100,OrignVS[i].pointofxy.y/100);
		glEvalCoord1f((GLfloat)i/30.0);
	}
	if(m_display)
	{
		float array[M][3];
		for(int i=0;i<selectedpoints.size();i++)
		{
		array[i][0]=selectedpoints[i].pointofxy.x/100.0;
		array[i][1]=selectedpoints[i].pointofxy.y/100.0;
		array[i][2]=0.0;
		}
     glMap1f(GL_MAP1_VERTEX_3,0.0,1.0,3,selectedpoints.size(),&array[0][0]);
     glEnable(GL_MAP1_VERTEX_3);
	 glShadeModel(GL_FLAT);
		for(i=0;i<selectedpoints.size();i++)
	{
		glBegin(GL_LINE_LOOP);
		glColor3f(0.f,1.f,0.f);
		//glVertex3f(array[i][0],array[i][1],array[i][2]);
		glEvalCoord1f((GLfloat)i/20);
	}
	}
	glEnd();
	/*glFlush();
	glBegin(GL_LINES);
	glColor3f(1.f,0.f,0.f);
	glVertex3f(0.f,0.f,0.f);
	glVertex3f(1.f,0.f,0.f);
	glVertex3f(1.f,0.f,0.f);
	glVertex3f(0.9f,0.1f,0.f);
	glVertex3f(1.0f,0.f,0.f);
	glVertex3f(1.0f,-0.1f,0.f);
	glColor3f(0.f,1.f,0.f);
	glVertex3f(0.f,0.f,0.f);
	glVertex3f(0.f,1.f,0.f);
	glVertex3f(0.f,1.f,0.f);
	glVertex3f(0.1f,1.0f,0.f);
	glVertex3f(0.0f,1.0f,0.0f);
	glVertex3f(-0.1f,0.9f,0.0f);
	glColor3f(0.f,0.f,1.f);
	glVertex3f(0.f,0.f,0.f);
	glVertex3f(0.f,0.f,1.f);
	glVertex3f(0.f,0.f,1.f);
	glVertex3f(0.f,0.1f,0.9f);
	glVertex3f(0.f,0.f,1.f);
	glVertex3f(0.f,0.1f,0.9f);
	glEnd();*/
}
void CCurverSimpleView::OnSize(UINT nType, int cx, int cy) 
{
	CView::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
	/*GLsizei w=cx;
	GLsizei h=cy;
	if(!h)
		return;
	CClientDC dc(this);
	wglMakeCurrent(dc.m_hDC,m_hglrc);
	glViewport(0,0,w,h);
	glPushMatrix();
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity(); 
	glMatrixMode(GL_MODELVIEW);
	glTranslatef(0.f,0.f,-4.f);
	glPopMatrix();
	wglMakeCurrent(NULL,NULL);
	Invalidate(TRUE);*/
	CClientDC clientDC(this);
	wglMakeCurrent(clientDC.m_hDC,m_hglrc);
    int w=cx;
	int h=cy;
    glViewport(0, 0, w, h);
	glPushMatrix();
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(40.0,double(cx)/double(cy),0.1f,10.f);
	glTranslatef(-2.3f,-1.8f,-4.f);
	glMatrixMode(GL_MODELVIEW);//沒有該語句無法顯示物體
	glPopMatrix();
    wglMakeCurrent(NULL,NULL);
	Invalidate(TRUE);
}
int CCurverSimpleView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	PIXELFORMATDESCRIPTOR pfd={
		sizeof(PIXELFORMATDESCRIPTOR),
		1,
		PFD_DRAW_TO_WINDOW|
		PFD_SUPPORT_OPENGL|
		PFD_DOUBLEBUFFER|PFD_SUPPORT_GDI,
		PFD_TYPE_RGBA,
		24,
		0,0,0,0,0,0,
		0,
		0,
		0,
		0,0,0,0,
		32,
		0,
		0,
		PFD_MAIN_PLANE,
		0,
		0,0,0
	};
	//獲取當前DC句柄
	CClientDC clientdc(this);
	//返回最佳匹配的像素格式
	int pf=ChoosePixelFormat(clientdc.m_hDC,&pfd);
	//設置像素格式
	BOOL rt=SetPixelFormat(clientdc.m_hDC,pf,&pfd);
	//crate rendering context
	m_hglrc=wglCreateContext(clientdc.m_hDC);
	return 0;
}
void CCurverSimpleView::OnDestroy() 
{
	CView::OnDestroy();
	
	// TODO: Add your message handler code here
	if(wglGetCurrentContext()!=NULL)
		wglMakeCurrent(NULL,NULL);
	if(m_hglrc!=NULL)
	{
		wglDeleteContext(m_hglrc);
		m_hglrc=NULL;//?一定要這一句嗎
	}
}


void CCurverSimpleView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CMainFrame*pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
	CStatusBar*pStatus=&pFrame->m_wndStatusBar;
	CString str;
	//int count=0;
	if(pStatus)
	{
		str.Format("x=%f",float(point.x));
		pStatus->SetPaneText(1,str);
		str.Format("y=%f",float(point.y));
		pStatus->SetPaneText(2,str);
	}
	//GLDrawPoint(point);
	/*glPointSize(i*2);
      glBegin (GL_POINTS);*/
	Orignpoint temppoint;
	if(m_bDraw)
	{
		//temppoint.pointID=count;
		//count++;
		temppoint.pointID=m_MouseDownNum;
		CString str1;
		str1.Format("%d",m_MouseDownNum);
		//str=atoc(m_MouseDownNum);
		CClientDC dc(this);
		dc.SetPixel(point,RGB(0,0,0));
		dc.TextOut(point.x,point.y,str1);
		temppoint.pointofxy.x=point.x;
		temppoint.pointofxy.y=point.y;
		temppoint.usedFlag=false;
		featurepoints.push_back(temppoint);
		//m_MouseDownNum+=1;

	}

		/*pt=point;
		ptbegin=point;
		SetCapture();*/
	
		if(m_newdraw=TRUE)
	{	m_ptStart=point;
		m_ptOld=point;
		temppoint.pointID=m_MouseDownNum;
		CString str1;
		str1.Format("%d",m_MouseDownNum);
		m_MouseDownNum++;
		temppoint.pointofxy.x=point.x;
		temppoint.pointofxy.y=point.y;
		temppoint.usedFlag=false;
		featurepoints2.push_back(temppoint);
		SetCapture();
		CRect rect;
		GetClientRect(&rect);
		ClientToScreen(&rect);
		ClipCursor(&rect);
	}	
		if(m_PtInTriangle==1)
		{
			CClientDC dc(this);
			dc.TextOut(point.x,point.y,"▲");
			TrianglePt.push_back(point);
			if(TrianglePt.size()>=4)
			m_PtInTriangle=2;
		}
		
	CView::OnLButtonDown(nFlags, point);
}
/*void CCurverSimpleView::OnGetfeaturepoint() 
{
	// TODO: Add your command handler code here
	m_MouseDown=TRUE;
	featurepoints.size();
}*/
void CCurverSimpleView::GetLineABC(CPoint pt1,CPoint pt2,float&A,float&B,float&C)
{
	float dis=0.0;
	dis=sqrt(pow((pt1.x-pt2.x),2)+pow((pt1.y-pt2.y),2));
	A=(pt1.y-pt2.y)/dis;
	B=(pt2.x-pt2.x)/dis;
	C=(pt1.x*pt2.y-pt2.x*pt1.y)/dis;
}
int CCurverSimpleView::GetSelectpointID(vector<Orignpoint>fps,int&id,float fa)
{
	float a,b,c,max,temp;
	max=0.0;
	/*if(fps.size()<=2)
		return -1;*/
	if(fps.size()<=2)
	{
		FlagEnd=1;
		id=fps[fps.size()-1].pointID;
		return 0;
	}
	FlagEnd=0;
	GetLineABC(fps[0].pointofxy,fps[fps.size()-1].pointofxy,a,b,c);//怎么有9個點
	for(int i=1;i<fps.size()-1;i++)//去掉第一點和最后一個點

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美一区二区三区网站| 欧美日韩免费在线视频| 男男成人高潮片免费网站| 亚洲精品ww久久久久久p站| 日本一区二区成人| 国产精品视频九色porn| 国产精品看片你懂得| 亚洲欧美自拍偷拍色图| 最新欧美精品一区二区三区| 中文字幕不卡在线播放| 国产精品久久久99| 1024成人网| 亚洲国产中文字幕在线视频综合| 亚洲综合一区二区| 日本va欧美va精品发布| 久久精品国产77777蜜臀| 狠狠狠色丁香婷婷综合久久五月| 国产精品自拍三区| 97久久超碰国产精品电影| 欧美性大战久久| 欧美变态tickle挠乳网站| 久久久久亚洲综合| 亚洲主播在线观看| 九九视频精品免费| 成人激情动漫在线观看| 欧美系列在线观看| 欧美videofree性高清杂交| 国产精品色呦呦| 亚洲午夜一二三区视频| 玖玖九九国产精品| av在线综合网| 欧美一级xxx| 国产精品久久久久久久久久免费看| 一区二区三区在线免费观看| 捆绑变态av一区二区三区| 成人国产精品免费观看| 欧美高清视频不卡网| 欧美激情一区二区三区| 亚洲福利电影网| 成人开心网精品视频| 在线播放中文一区| 亚洲色图在线看| 激情久久久久久久久久久久久久久久| 91视视频在线观看入口直接观看www| 91精品蜜臀在线一区尤物| 中文字幕亚洲不卡| 韩国成人福利片在线播放| 91福利国产成人精品照片| 国产欧美一区二区三区在线老狼| 婷婷久久综合九色综合伊人色| 国产成人免费视| 日韩精品一区二区三区视频播放| 亚洲色欲色欲www| 风间由美中文字幕在线看视频国产欧美 | 亚洲视频免费看| 国产一区二区三区不卡在线观看 | 国产精品资源在线观看| 欧美日本一区二区在线观看| 国产精品国产三级国产有无不卡| 捆绑紧缚一区二区三区视频| 欧美卡1卡2卡| 亚洲一区二区三区四区在线观看| 成人av中文字幕| 国产精品色哟哟网站| 国产成人自拍网| 精品粉嫩aⅴ一区二区三区四区| 婷婷丁香激情综合| 欧美日本精品一区二区三区| 亚洲激情男女视频| 日本大香伊一区二区三区| 欧美国产一区视频在线观看| 国产精品一级黄| 国产性天天综合网| 国产凹凸在线观看一区二区| 精品国精品国产| 国内精品嫩模私拍在线| 精品久久久久久无| 国产激情一区二区三区桃花岛亚洲| 精品国产制服丝袜高跟| 精品午夜一区二区三区在线观看| 日韩欧美一区在线观看| 久久机这里只有精品| 精品国产乱码久久久久久图片| 久久99九九99精品| 久久久久久久久97黄色工厂| 成人妖精视频yjsp地址| 自拍av一区二区三区| 欧美无砖专区一中文字| 午夜欧美视频在线观看| 日韩一区二区三免费高清| 美国十次综合导航| 欧美经典一区二区| 一本色道久久综合亚洲精品按摩| 一区二区久久久久久| 日韩午夜精品电影| 国产精品香蕉一区二区三区| 亚洲国产激情av| 在线观看视频一区| 另类人妖一区二区av| 国产精品美女久久福利网站| 在线观看免费成人| 国产一区视频导航| 一区二区三区不卡在线观看| 6080yy午夜一二三区久久| 国产精品自在欧美一区| 亚洲综合999| 26uuu国产日韩综合| 色综合久久中文字幕综合网| 麻豆视频观看网址久久| 国产精品久久久久影院色老大| 精品1区2区3区| 国产剧情一区在线| 午夜婷婷国产麻豆精品| 久久天天做天天爱综合色| 91久久精品一区二区二区| 久88久久88久久久| 亚洲国产精品一区二区久久恐怖片 | 欧美日韩大陆一区二区| 盗摄精品av一区二区三区| 午夜精品爽啪视频| 中文字幕一区二区三区不卡在线| 91麻豆精品国产| 91麻豆免费视频| 国产电影一区在线| 美女诱惑一区二区| 亚洲成人1区2区| 国产精品电影院| 久久综合色一综合色88| 欧美日免费三级在线| 99天天综合性| 国产成人午夜精品影院观看视频 | 欧美国产在线观看| 精品欧美一区二区久久| 欧美日韩日日夜夜| 在线视频一区二区三| gogo大胆日本视频一区| 国产乱码精品一品二品| 无吗不卡中文字幕| 亚洲一二三四在线观看| 国产精品天干天干在线综合| 久久精品日产第一区二区三区高清版 | 国产精品一区专区| 韩国午夜理伦三级不卡影院| 日日欢夜夜爽一区| 三级久久三级久久久| 亚洲电影你懂得| 亚洲高清三级视频| 一区二区三区免费| 亚洲在线视频免费观看| 亚洲欧美日韩国产一区二区三区| 中文字幕的久久| 国产精品麻豆一区二区| 国产精品你懂的| 亚洲人吸女人奶水| 一区二区视频在线看| 一区二区三区视频在线看| 亚洲综合区在线| 亚洲综合色婷婷| 丝袜诱惑制服诱惑色一区在线观看 | 五月天婷婷综合| 日韩不卡一区二区三区 | 国产一区啦啦啦在线观看| 狠狠色丁香九九婷婷综合五月| 韩国欧美一区二区| 国产91精品免费| 日本久久一区二区| 欧美丰满少妇xxxbbb| 欧美一级久久久| 久久九九全国免费| 亚洲精品午夜久久久| 午夜激情一区二区三区| 捆绑变态av一区二区三区| 国产成人啪免费观看软件| a4yy欧美一区二区三区| 色综合视频在线观看| 欧美福利视频一区| www国产精品av| 亚洲欧美一区二区三区国产精品 | 色综合视频在线观看| 欧美日韩国产小视频| 日韩亚洲电影在线| 欧美国产日韩精品免费观看| 专区另类欧美日韩| 日韩va欧美va亚洲va久久| 国产v日产∨综合v精品视频| 欧美在线制服丝袜| 精品国产3级a| 一区二区在线观看免费| 久久精品国产免费| 色哟哟亚洲精品| 精品免费视频一区二区| 一区二区在线电影| 国产乱码精品一品二品| 欧美视频一区在线观看| 国产亲近乱来精品视频| 亚洲成人1区2区| 99re亚洲国产精品| 国产亚洲欧美中文| 日本系列欧美系列| 色婷婷av一区二区三区gif|