《计算机图形学》新版实验指导书docxWord下载.docx
《《计算机图形学》新版实验指导书docxWord下载.docx》由会员分享,可在线阅读,更多相关《《计算机图形学》新版实验指导书docxWord下载.docx(33页珍藏版)》请在冰豆网上搜索。
AppWizard为框架的建立提供了一系列对话框及多种选项,用户可以根据不同的选项生成自己所需要的应用程序框架。
具体步骤如下:
1、从“文件”菜单选择“新建”菜单项,在“新建”对话框中选择“工程”选项卡,从项目类型中选择MFCAppWizard(.exe)。
在“位置”文本框中,可直接输入目录名称,或者单击“…”按钮选择己有的目录。
在“工程名称”文本框中输入项H的名称,如Draw,其他采用默认值,这时确定按钮变亮,如下图所示:
2、单击确定按钮,弹出“MFC应用程序向导步骤1”对话框,如图所示,选择单文档单选按钮和“中文[中国]”选项,表示要生成以中文为用户界面的单文档(SD1绘图程序)。
3、点击下一步,在随后出现的几个对话框中,都点击下一步,表示采用各项的默认设置,直到出现“MFC应用程序向导步骤6”对话框,如图所示。
4、“MFC应用程序向导步骤6”对话框中默认设置确定了类得名称及其所在文件的名
称。
用户可以改CdrawApp、CmainFrame和CdniwDoc的文件名称,但不可以改变它们的基类。
单击完成按钮,应用程序向导显示将要创建的文件清单,再单击确定,MFC应用程序向导就自动生成绘图程序的各项源文件了。
MFC应用程序向导设置完后,点击组建按钮,然后再点击执行按钮,就会出现MFC应用程序向导生成的完整应用程序的基本框架。
(二)在应用程序中增加菜单
1、增加菜单资源
打开资源浏览器窗口,显示程序资源,单击DrawResources左边的“+”,使文件夹扩展,然后双击“Menu"
项下的“IDR_MAINFRAME”标识符,打开菜单编辑器窗口,单击“帮助”菜单,按Insert键,插入一个空白框,输入新菜单名“绘图”,如下所示:
双击“绘图”下方的空白框,在“绘图”菜单下增加“绘图练习”的子菜单,并给其设定一个ID值ID_Exercise,如下所示:
2、进行菜单命令的消息映射
若使系统执行对菜单的单击选择,必须把这些菜单命令消息都映射给文档类。
选择“查看”菜单下的“建立类向导”菜单项,在“建立类向导”对话框屮选择“MessageMaps”选项卡,在"
Classname”下拉列表框中选择“CdrawView”类,在“ObjectIDs”列表框中选择TD_Exercise”,在"
Message"
列表框中选择“COMMAND”,然后单击AddFunction按钮,会出现一个对话框,给出了默认的成员函数名称OnExercise,单击OK按钮,就完成了对菜单“绘图练习”消息映射。
这时在"
ClassView"
面板中展开CDrawView类,会看到多了一个函数OnExercise。
■FCClassYizard
MessageMapsMemberVariables|Automation|ActiveXEvents|ClassInfo
Description:
Handleacommand(frommenu”acceLcmdbutton)
确定I取消
(3)在绘图函数中添加代码
通过以上步骤,得到了与菜单对应的消息映射,就可以在函数OnExcrcisc屮添加代码绘制图形了。
voidCDrawView:
:
OnExercise()
{
//TODO:
AddyourcommandhandlercodehereCDC*pDC=GetDC();
//得到绘图类指针RedrawWindow();
//重绘窗口pDC->
Rectangle(50,20,700,400);
〃以默认画笔画一矩形
CPenbluepen(PS_DASH」,RGB(0,0,255));
//创建画虚线、线宽为1的蓝色画笔
CPen*old=pDC->
SelectObject(&
blucpcn);
pDC->
Ellipse(100,50,250,200);
//画圆
CPenredpen(PS_SOLID,2,RGB(255,0,0));
//创建画煨线、线宽为2的红色画笔pDC->
redpen);
Ellipse(500,50,650,200);
//画圆
MoveTo(375J00);
//画一三角形pDC->
LineTo(225,300);
LineTo(525,300);
LineTo(373,100);
由以上代码绘出的图形如下:
五、思考
1、MFC工程项冃与Win32ConsoleApplication项冃有何区别?
2、如果我们不采用系统已有的函数来绘制图形,自己如何去设计相应的函数?
3、利用MFC编程来开发图形应用程序的基本步骤主要有儿步。
六、实验总结
学号姓名
课程名称
完成日期
实验二实现直线的生成算法
1、进一步熟悉CDC图形程序库;
2、掌握数值微分直线生成算法;
3、掌握屮点画线算法;
4>掌握Bresenham直线生成算法。
3、根据实验指导书提供的基本思想,完成任意斜率直线的生成。
(一)生成绘图应用程序的框架(如下图)
具体实现见第一次实验,过程不再详细说明。
(二)在应用程序屮增加菜单
完成相关菜单的设计,具体的效果如下图所示,并设置好相关菜单消息的映射,具体的实现在前面的实验中介绍过,再此不在详细说明。
(三)在应用程序中增加一个直线参数设置的对话框
在VC++6.0环境中打开资源视图,插入一个对话框,如图所示:
然后出现下图:
在该对话框中设计四个静态文本框,四个文本编辑框,并删除取消按钮,最终设计出下面的效果。
设计完该对话框之后,为该对话框建立一个类,右键点击该对话框,出现下图:
为该类设计一个名字,如下所示:
点击确定后,出现下图:
MessageMapsMemberVariablesAutomationActiveXEvents
Project:
drawline
ID_AI>
I>
_ABOUI
IDAPPEXITID.BREID-DDAID-EDIT.COPYID-EDIT_CUTID_EDIT_PASTE
V
Dl..MnputLineInfo.kDl.AInputLInelnfo.cpp
ObjectIDs:
ClassInfo
Memberfunctions:
VDoDatarxchange
Description:
取消
确定
然后再给对话框中的I丿L|个文本编辑框添加成员变量,如下所示:
成员变量设计完成后,出现下图:
到此为止,对话框设计完成,这时候打开文件视图,打开drawJineView.h,将InputLinelnfo.h包含进去。
drawlincVicw・h♦
口口冈
//drawIineView・h:
interfaceo-
//J
#incIude"
InputLineInfo.h|"
#if!
defined(AFX_DRAW_LINEVIEW_H
#defineAFXDRAWLINEVIEWH62D(#if_MSC_VER>
1000
#pragmaonce
2Tz
#endif//MSCVER>
(4)在绘图函数中添加代码
通过以上步骤,得到了与菜单对应的消息映射,就可以在函数中添加代码绘制图形了。
1、利用数值微分算法生成直线(算法的详细原理见教材)。
voidCDraw_LineView:
OnDda()
Addyourcommandhandlercodehere
InputLinelnfoDig;
Dlg.DoModal();
〃打开直线参数设置对话框
CDC*pDC=GetDC();
//得到绘图类指针
//RedrawWindow();
//重绘窗口
intx,xO,yO,xl,yl;
//(xO,yO)为直线的起点,(xl,yl)为直线的终点
floatdx,dy,k,y;
xO=Dlg.qidian_x,yO=Dlg.qidian_y;
x1=Dlg.zhongdian_x,y1=Dlg.zhongdian_y;
dx=xl-xO;
dy=yl-yO;
k=dy/dx;
y二yO;
for(x=xO;
x<
=x1;
x++)
SetPixel(x,int(y+0.5),RGB(255,0,0));
y二y+k;
}
2、利用中点画线算法生成直线(算法的详细原理见教材)。
OnMid()
InputLinelnfoDig;
〃打开直线参数设置对话框CDC*pDC=GetDC();
//W到绘图类指针//RedrawWindow();
intxO,yO,xl,yl;
inta,b,deltal,delta2,d,x,y;
x1=Dlg.zhongdian_x,y1=Dlg.zhongdian_y;
a=yO-y1;
b=xl-xO;
d=2*a+b;
deltal=2*a;
delta2=2*(a+b);
x=xO;
y=yo;
pDC・>
SetPixel(x,y,RGB(0,0,255));
//SetPixel为CDC类里面的画点函数,具体参数while(x<
xl)〃有3个,分别是点的坐标和画点所用的颜色。
if(d<
0)
{x++;
y++;
d+=delta2;
else
d+=deltal;
SetPixel(x,y,RGB(0,255,0));
3、利用Bresenham画线算法生成直线(算法的详细原理见教材)
OnBre()
Dlg.DoModalO;
/