资源描述
计算机图形学基础,第5章交互式技术,本章主要内容,常用的交互技术交互技术的实现(鼠标绘图)二维图形技术综合应用,什么是交互技术?指使用输入设备进行输入的技术。作用:交互式绘图主要内容:交互设备交互任务基本交互技术(如橡皮筋技术)的实现,交互式绘图,设计者在操作计算机系统绘图时,人与计算机之间进行信息交换,从而完成复杂的绘图任务。需要:交互式技术常见系统:AutoCAD、Photoshop、3DMAX(视景仿真)Creator、Vega,交互技术、交互设备、交互任务三者关系,用户,交互界面,系统程序员图形库,交互设备,交互技术,交互技术,交互任务,图形输入设备的逻辑分类,输入控制,请求模式(RequestMode)输入设备在应用程序的控制下工作,程序在输入请求发出后一直被置于等待状态,直到数据输入。取样模式(SampleMode)应用程序与输入设备同时工作,当输入设备工作时,存储输入数据,并不断更新当前数据,当程序要求输入时,程序采用当前数据值。事件模式(EventMode)每次用户对输入设备的一次操作以及形成的数据称为一个事件(Event),事件按先后顺序排成队列,先进先出,设备被设置为事件方式,程序与设备同时工作。,5.1常用的交互技术,一个交互图形系统或图形应用程序,必须允许用户动态的输入坐标,指定选择功能,拾取操作对象,设置变换坐标,以及在图形显示时对图形的局部进行修改(例如平移、旋转、缩放等比例变换)、删除等操作。用户还可以允许使用橡皮筋技术,拖动技术等交互技术来进行绘图。这种交互绘图方式完全区别于通过程序自动运行产生的绘图方式。,橡皮条技术,定位技术,拖拽技术,定值技术,菜单技术,栅格技术,拾取技术,约束技术,吸附技术(引力域),插入符号、回显功能,直线、圆、矩形橡皮筋,5.1常用的交互技术,定位技术,5.1常用的交互技术,用来给应用程序指定位置坐标(x,y)或(x,y,z)。完成此任务一般情况下可采取两种方法,其一,用鼠标移动屏幕上的光标到满意的位置,然后按一下鼠标左键;其二,用键盘直接输入满意的位置坐标。另外,还可以将这些技术混合在一起作用,,5.1.1定位技术,5.1.1定位技术,定位是图形输入和图形操作时常用的输入操作之一。定位有直接定位和间接定位两种方式。,voidcursor(intx,inty)setwritemode(XOR_PUT);line(x+3,y,x-3,y);line(x,y-3,x,y+3);,鼠标等设备的相对移动控制光标定位(异或方式显示光标)在屏幕指定位置画一个十字光标:voidcursor(intx,inty),5.1.2橡皮筋技术,定位操作有时依赖于环境。例如,在绘图时,已经存在一个圆C和圆外一点A,现在要确定另外一点B,使两点连线AB与圆C相切。这种点的确定可通过使用橡皮条技术而变得容易实现。,用橡皮条技术定位(显示线段用异或方式),橡皮筋技术(续),橡皮筋技术图例,5.1.3拖拽技术,拖曳技术被用于拼装定位和其他一些操作(如布局操作)中去,以便使工作变得直观、简便、高效。,拖曳一个二极管符号,拖曳技术,5.1.4定值技术,定值输入用于设置物体旋转的角度、缩放的比例因子等,刻度尺与比例尺,圆形刻度尺与比例尺,定值技术定值技术在交互过程中应用很多,而且是必不可少的。用户经常需要输入一个数值,指定一个数量,完成这种任务需要确定精度(单位),需要的设备是键盘或电位计。定值技术有两种:(1)键入数值;例如画圆时,输入半径1.2等。(2)改变电位计阻值产生要求的数量,可以用模拟的方式实现电位计功能。,5.1.5拾取技术,在图形系统的许多交互操作中,经常需要在一个分层的对象结构或虽不分层但很复杂的对象结构中拾取一个基本对象或一些基本对象的集合,然后对其施加某种操作。,拾取一个基本对象可以通过一些方法来实现:指定名称法特征点法外接矩形法分类法直接法,拾取技术(续),拾取操作,5.1.6约束技术,方向约束:如X、Y方向上的约束(AutoCAD中命令为autho)栅格约束:输入点用离它最近的网格点位置坐标代替。(AutoCAD中命令为Grid)(距离为10i,10j)栅格坐标:10*(int(x+0.5)+5)/1010*(int(y+0.5)+5)/10,5.1.7菜单技术,菜单是一种很重要的交互技术,它可用于指定命令、确定操作对象或选定属性等多中选一的场合。,菜单的层次结构(单层次的、多层次的),菜单的表示(字符串方法、图符方法和图像方法),菜单的显示控制(固定式、弹出式),菜单的选择菜单可通过多种设备来选择,如使用指点设备直接选择、使用方向键顺序循环选择、使用数字键指定选择或使用功能键对应选择等。,5.1.8网格(Grid)与吸附(Snap)技术,有时要从某已有线段上的点或它的顶点开始绘制另一条线段或其他图形,直接使用定位设备很难保证选中点的重合性。吸附技术则可克服这种困难。,带有引力场的线段,网格与吸附技术,网格化是帮助绘制整齐、精确图形的一种技术。有时要从已有的某线段上的点或它的顶点开始绘制另一条线段或其他图形,直接使用定位设备来定位很难保证其重合性。吸附技术可保证用户在定位坐标时只能选择网格上的点,而不能选择网格之间的点,这样就可以克服单纯使用定位设备时无法保证准确性的困难。,5.2CAD(交互式图形)系统分析,计算机图形学绘图基础可以使用MFC类库(任何时候可以调用Win32函数,最大程度地利用Windows)与绘图有关的关键类Document存储数据View观察窗口(OnDraw()函数:“画”的动作)MainFrameApplication代表应用程序(用户启动应用程序时,Windows交用应用程序框架内置的WinMain函数,寻找一个由CWinApp派生的全局构造的应用程序对象),图形设备接口(GraphicDeviceInterface:GDI),管理:图形设备信息、坐标系和映射模式、绘图当前状态(画笔、画刷、颜色、字体)、绘图具体操作(画线、画圆等)CGdiObject派生出的对象:CBitmapCBrushCPenCRgnCFontCPalette,VC中(绘图应用程序)最重要的类,CDC(设备环境类)功能:其成员函数可以用于对设备环境的操作、绘图工具的使用、GDI对象的选择等。例:CDC*pDC;pDC-LineTo(x,y);先构造一个CDC对象,然后能使用其成员函数,并及时删除(太多了,系统回在调试窗口中报错),绘图系统设计基本原则,结构层次化通用性强、使用方便处理速度快程序容易:读、查、改、移植、扩充,图形层次结构,一般物体可以分解为不同形体元素的集合,可分层表示:图形子图形床,床架,床头,分层复杂图形-简单图形,简单CAD绘图软件功能,基本功能图形绘制(点、线、多折线、圆/椭圆、圆弧)颜色、线型改变文本图形放大/缩小(重绘)编辑(删除、复制、移动)高级功能Redo/Undo图层三维绘图,5.3交互技术的实现(鼠标绘图),步骤如下:新建一个MFC单文档工程文件。创建绘图菜单,并添加3个子菜单。,3)利用ClassWizard为3个菜单项添加菜单响应函数,4)添加代码,/绘制直线voidCDrawView:OnDrawLine()CDC*pDC=GetDC();/获得当前窗口的设备上下文pDC-MoveTo(100,100);/起点pDC-LineTo(400,400);/终点/绘制矩形voidCDrawView:OnDrawRect()CDC*pDC=GetDC();pDC-Rectangle(100,100,400,400);/绘制圆voidCDrawView:OnDrawCircle()CDC*pDC=GetDC();pDC-Ellipse(100,100,300,300);,运行结果,在视图类头文件中添加:/添加以下成员变量CPointm_p1,m_p2;/起点和终点intm_drawcurrent;/当前绘图对象在构造函数中初始化成员变量。CDrawView:CDrawView()m_drawcurrent=0;修改原绘图代码:/绘制直线voidCDrawView:OnDrawLine()m_drawcurrent=1;/直线/绘制矩形voidCDrawView:OnDrawRect()m_drawcurrent=2;/矩形/绘制圆voidCDrawView:OnDrawCircle()m_drawcurrent=3;/圆在OnLButtonDown中添加如下代码:voidCDrawView:OnLButtonDown(UINTnFlags,CPointpoint)if(0=m_drawcurrent)return;/非绘图状态m_p1=point;/得到起点CView:OnLButtonDown(nFlags,point);,在OnLButtonUp中添加如下代码#include“math.h”voidCDrawView:OnLButtonUp(UINTnFlags,CPointpoint)if(0=m_drawcurrent)return;m_p2=point;CDC*pDC=GetDC();switch(m_drawcurrent)case1:/直线pDC-MoveTo(m_p1);pDC-LineTo(m_p2);break;case2:/矩形pDC-Rectangle(m_p1.x,m_p1.y,m_p2.x,m_p2.y);break;case3:/圆intr=(int)sqrt(m_p2.x-m_p1.x)*(m_p2.x-m_p1.x)+(m_p2.y-m_p1.y)*(m_p2.y-m_p1.y);/半径intx1,x2,y1,y2;x1=m_p1.x-r;y1=m_p1.y-r;x2=m_p1.x+r;y2=m_p1.y+r;pDC-Ellipse(x1,y1,x2,y2);break;CView:OnLButtonUp(nFlags,point);,5.4二维图形技术综合应用,给出两个实例,参见教材:实例1平面图形综合设计,实例2-平面曲线图案设计,参见第5章实例“平面曲线图案设计”,习题,1、吸附技术有什么好处?2、VisualC+中有哪些鼠标响应的事件?试实现这些响应事件。3、基本CAD程序包括哪些功能?利用自己绘图程序进行平面图形设计(包括绘图图形与图形填充)。,本章小结,常用的交互技术有哪几种?栅格技术与吸附技术的异同。CAD(交互式图形)系统分析。利用VisualC+实现二维图形技术综合应用。,EndofChapter5,
展开阅读全文