码迷,mamicode.com
首页 > 其他好文 > 详细

计算机图形学--映射模式

时间:2015-10-15 17:52:42      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

    将图形显示在屏幕坐标系中的过程称为映射,映射模式分为逻辑坐标和设备坐标。逻辑坐标单位时米制尺度,设备坐标单位是像素。默认情况使用设备坐标系,一个设备坐标等于一个像素,像素的物理大小随设备的不同而不同,设备坐标系原点位于客户区的左上角,x轴水平向右,y轴垂直向下,设备坐标基本单位为一个像素。

   “窗口”与“视区”的概念。“窗口”理解为一种逻辑坐标系下的矩形区域,“视区”是设备坐标系下的矩形区域。x方向和y方向的比例因子:x方向比例因子=视区cx / 窗口cx, y方向比例因子=视区cy / 窗口cy 。如果设置SetWindowExt(100,100),SetViewportExt(200,200),则x方向和y方向的比例因子都为2,说明窗口的一个逻辑坐标映射为视区的两个像素。

void CTestView::OnDraw(CDC* pDC){

CTestDoc * pDoc = GetDocument();

CRect rect;  //声明CRect类矩形对象

GetClientRect(&rect);  //使用CWnd类的成员函数GetClientRect(LPRECT lpRect)获得客户区大小

pDC->SetMapMode(MM_ANISOTROPIC);  //设置映射模式为MM_ANISOTROPIC

PDC->SetWindowExt(rect.Width(),rect.Height());  //设置窗口

pDC->SetViewportExt(rect.Width(),-rect.Height());  //设置视区:x轴水平向右,y轴垂直向下

pDC->SetViewportOrg(rect.width()/2,rect.Heigth()/2);  //客户区中心为坐标系原点

 



绘制直线段函数:

MoveTo()和LineTo()函数

每次绘制直线段都是以当前位置为起点,直线段绘制结束后,直线段的终点又成为当前位置。

设置当前位置函数:CDC::MoveTo

原型:

CPoint MoveTo(int x,int y);

CPoint MoveTo(POINT point);

绘制直线段函数:CDC::LineTo

原型:

BOOL LineTo(int x,int y);

BOOL LineTo(POINT point);

 

举例:

void CTestView::OnDraw(CDC * pDC)

{

CTestCoc * pDoc = GetDocument();

CRect rect;

GetClientRect(&rect);

pDC->SetMapMode(MM_ANISOTROPIC);  //设置映射模式为MM_ANISOTROPIC

PDC->SetWindowExt(rect.Width(),rect.Height());  //设置窗口

pDC->SetViewportExt(rect.Width(),-rect.Height());  //设置视区:x轴水平向右,y轴垂直向下

pDC->SetViewportOrg(rect.width()/2,rect.Heigth()/2);  //客户区中心为坐标系原点

CPoint p0(-100,-50),p1(100,50);

Cpen NewPen,*pOldPen;

NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255));

pOldPen = pDC->SelectObject(&NewPen);

pDC->MoveTo(p0);

pDC->LineTo(p1);

pDC->SelectObject(pOldPen);

}

 



在MFC框架中输出图形和文本,如果不在OnDraw()函数中输出,则首先需要获得设备上下文,然后才能调用相应的CDC类的成员函数回吐。在任何时刻最多获得5个设备上下文,所以绘图完成后应释放所获得的设备上下文。

CDC* GetDC();

如果调用成功,返回当前屏幕客户去的设备上下文指针,否则,返回NULL

int ReleaseDC(CDC* pDC);

pDC是被释放的设备上下文指针,如果调用成功,返回“非0”,否则,返回“0”。

 

计算机图形学--映射模式

标签:

原文地址:http://www.cnblogs.com/benbencoding798/p/4882625.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!