计算机图形学MFC绘图模式逻辑坐标系和设备坐标系解析_第1页
计算机图形学MFC绘图模式逻辑坐标系和设备坐标系解析_第2页
计算机图形学MFC绘图模式逻辑坐标系和设备坐标系解析_第3页
计算机图形学MFC绘图模式逻辑坐标系和设备坐标系解析_第4页
计算机图形学MFC绘图模式逻辑坐标系和设备坐标系解析_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、如有帮助欢迎下载支持MFC绘图映射模式:我们需要先清楚几个定义:客户区坐标:应用程序的客户区,左上角(0,0)屏幕坐标:包括整个屏幕坐标,(0,0);屏幕坐标用在 WM_MOVE消息中(对于非子窗口)以及下面 的 Windows 函 数中:CreateWindow 和 MoveWindow( 都对于非 子窗口)、GetMessageGetCursorPos 、GetWindowRect 、WindowFromPoint 和 SetBrushOrg 中。用函数 ClientToScreen 和ScreenToClient可以将客户区域坐标转换成屏幕区域坐标,或反之。全窗口坐标:一个程序的整个窗口

2、,包括标题条。菜单。滚动条和窗口框,(0, 0).使用GetWindowDC得到的窗口设备环境,可以将逻辑单位转换成窗口坐标。逻辑坐标系:设备坐标系:窗口坐标:视口坐标:数据显示和图形绘制并不是在屏幕上直接进行的,而是首先将图形绘制到一个具有逻辑坐标 系的虚拟窗口中,然后在根据预先设置好的映射模式,将虚拟窗口中的图形或图像映射到屏 幕或打印机等设备中。虚拟的窗口叫窗口win dow,显示图像的设备就是视口viewport.绘制图像的过程:先绘制到虚拟窗口(逻辑坐标)(映射模式)屏幕或打印机等设备(设备坐标)逻辑原点:逻辑坐标原点算作是窗口中的一个固定的点,通过该点引出两条坐标线,建立逻辑坐标系

3、,长度单位和正方向通过setmapmode ()来设置。窗口原点:只是逻辑坐标系中一个可变点,这个点通过SetWindowOrg来设置。设备原点:设备坐标原点可看作在视口的一个固定点,对于屏幕而言,它对应于左上角点,通过这个点建立设备坐标系,长度单位像素x 、y向下视口原点:视口原点是设备坐标系中的一个可变的点,这个点的坐标可以通过SetViewOrg来设置。逻辑坐标系和设备坐标系的联系:是通过窗口原点和视口原点联系的,当图像各点从逻辑坐标系向设备坐标系映射时,根据坐 标之间的换算关系,换算成图像各点在设备坐标中相对于视口原点的位置,实现坐标映像。实际上视口原点和窗口原点是同一个点(默认的都是

4、(0,0),在设备坐标系和逻辑坐标系中有不同的坐标值,但是这两种坐标系位置是固定的,原点都是(0, 0)(或者更标准一些:XL-XLO=(xWi ndowExt/xViewportExt)*(XD-XDO)YL-YLO=(yWi ndowExt/yViewportExt)*(YD-YDO);L表示逻辑坐标系,D表示设备坐标系,LO窗口原点,DO设备原点逻辑坐标系和设备坐标系转换步骤:设置映射模式设置窗口原点设置视口原点坐标转换(windows自行处理)x轴水平方向向例子1. MMTEXT莫式是默认情况下的模式,坐标原点位于客户区的左上角, 右,y轴垂直向下,坐标基本单位为一个像素。Window

5、: viewport 1:1140) pDC-SetMapMode(MM_TEXT); / 设置映射模式 MM_TEXT pDC-SetWindow0rg(100,100);不设置时,(0, 0)点窗口坐标(0,/CPoi nt poi nt = pDC-GetWi ndowOrg();/pDC-TextOut(poi nt.x,poi nt.y,this is ap p);pDC-SetViewportOrg(100,100);/pDC-TextOut(point.x+200,point.y+200,this is app2);pDC-Recta ngle(CRect(100,100,300

6、,300);j左我的程序绘图-GDI2_i_8文件狠蝙辑(E)查看CV)帮助00x ife es就绪MM_TEXTXL-XLO=N*(XD-XDO);100-100=N*(XD-100)-XD=100;N=1;(100,100)-(100,100) YL-YLO=N*(YD-YDO);100-100=N*(YD-100)-YD=100;300-100=1*(XD-100);XD=300300-100=1*(YD-100);YD=300;例子2:pDC-SetMapMode(MM_TEXT); / 设置映射模式/pDC-SetWindowOrg(100,100);不设置时,(0, 0)点窗口坐标

7、(0, 0)/CPoi nt poi nt = pDC-GetWi ndowOrg();/pDC-TextOut(poi nt.x,poi nt.y,this is ap p);pDC-SetViewportOrg(100,100);/pDC-TextOut(point.x+200,point.y+200,this is app2);pDC-Recta ngle(CRect(100,100,300,300);营E g 360安胛匚类裁HTNIL . . GDT3Win doworg(0,0),viewportorg(100,100)100-0=1*(XD1-100);XD1=200;100-0

8、=1*(YD1-100);YD1=200;(200,200),(400,400)例子3:pDC-SetMapMode(MM_TEXT); / 设置映射模式 pDC-SetWindowOrg(100,100);不设置时,(0, 0)点窗口坐标(0, 0)/CPoi nt poi nt = pDC-GetWi ndowOrg();/pDC-TextOut(poi nt.x,poi nt.y,this is ap p);/ pDC-SetViewportOrg(100,100);/pDC-TextOut(point.x+200,point.y+200,this is app2);pDC-Recta

9、ngle(CRect(100,100,300,300);Ji if LWJLiiuuur y | h mu v i uo fWin doworg(100,100),viewportorg(0,0)100-100=1*(XD1-0);XD1=0;100-100=1*(YD1-0);YD1=0;(0,0)-(200,200)例子4:CRect rect;/声明客户区矩形GetClientRect(&rect);/ 获得客户区坐标pDC-SetMapMode(MM_TEXT); / 设置映射模式pDC-SetWindow0rg(100,100);不设置时,(0, 0)点窗口坐标(0, 0)/CPoi

10、 nt poi nt = pDC-GetWi ndowOrg();/pDC-TextOut(poi nt.x,poi nt.y,this is ap p);pDC-SetViewportOrg(100,100);/ pDC-TextOut(point.x+200,point.y+200,this is app2);pDC-Recta ngle(CRect(100,100,300,300);壬我的程序绘图-GDI2文件00编辑(E)查看(X)帮助00D 2 R jT叮G曇辔就绪在客户区绘制;例子 5MM_LOMETRIC每个逻辑坐标系转换为 0.1mm,x- , y向上kboutDIg jDI2

11、_1_0AppWl2_C8Doc 3DI2 1 8View wlainFranie obals(100,100)=(10mm,10mm);(300,300)=(30mm,30mm)例子:各向异性模式:MM_ANISOTROPIC xWindow:xViewport yWindow:yViewport两个比例结果不同;如果相同则是MM_ISOTROPI;C逻辑坐标系和设备坐标系并没有发生变化。只是在设备坐标系中,坐标的值如果为负,则是显示到x轴上方,实际是看不到的。nr j n # ni_ Ji . p L/uib j ./ TOD(J: ddd drav code for matiue dat

12、a here/ CRect rect;声明客户/ GetClientftect(&rect);获密客户pDC-SetMapMode(MM_LOMETRIC); /缎置唤射模式pDC-SetWindowOrg(10O,10O);不i殳臺打代 0;/ CPoint point = pDC-GetUlndourOrg();/ pDC-TextOut(point.x.point-yfMthis is appM); pDC-SetUiewportOrg(1OOt100);/ pDC-TextOut(point _x+2C0,point-y + 2G0/this ispDC-Rectangle(CRect

13、(lOC;CRect rect;/声明客户区矩形GetClientRect(&rect);/ 获得客户区坐标pDC-SetMapMode(MM_ANISOTROPIC);/ 设置映射模式pDC-SetWi ndowExt(rect.Width(),rect.Height();pDC-SetViewportExt(rect.Width(),-rect.Height(); pDC-Recta ngle(CRect(100,-100,300,-300);100-0=1*(XD-0);XD=100;-100-0=-1*(YD-0);YD=100;(100,100)(300,-300)-(300,300

14、);例子CRect rect;/声明客户区矩形GetClientRect(&rect);/获得客户区坐标pDC-SetMapMode(MM_ANISOTROPIC);/设置映射模式pDC-SetWi ndowExt(rect.Width(),rect.Height();pDC-SetViewportExt(rect.Width(),-rect.Height(); pDC-Recta ngle(CRect(100,100,300,300);)1?)1? 1CGDKCAboiCMaiiGloblIng. B8Uie(100, 100) (100, 100)(300, 300)SetMapMode(

15、MM_ANISOTROPIC); / 设置映射模式 pDC-SetWi ndowExt(rect.Width(),rect.Height();pDC-SetViewportExt(rect.Width(),rect.Height();pDC-Recta ngle(CRect(100,100,300,300);FIKF | OU| i | | U_J | 3 1LJ | n模式MMSOTROPI同模式MM_ANISOTROPI用方类似,但是需要注意比例设置相同。其它几个模式(逻辑坐标系变化了,x-,y向上。):同时也就是长度转换大水发生变化例子:CRect rect;/声明客户区矩形GetClientRect(&rect);/ 获得客户区坐标pDC-SetMapMo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论