实验三_图形交互技术(完结版).doc
- 文档编号:584455
- 上传时间:2023-04-29
- 格式:DOC
- 页数:6
- 大小:45KB
实验三_图形交互技术(完结版).doc
《实验三_图形交互技术(完结版).doc》由会员分享,可在线阅读,更多相关《实验三_图形交互技术(完结版).doc(6页珍藏版)》请在冰点文库上搜索。
《计算机图形学》
实验报告
2010年12月
实验三图形交互技术
3.1实验目的
1、通过本次实验,掌握图形输入和交互技术的方法。
2、掌握部分图形交互技术的实现方法。
3、进一步熟练编程语言环境中图形绘制技术。
3.2实验内容
3.2.1综合使用鼠标、菜单、橡皮条等交互技术实现直线、圆和矩形等基本图形的绘制。
主要内容:
菜单程序设计
将绘图命令放在用户界面的菜单中,通过选择绘图命令来绘图。
步骤1:
创建jhs应用程序工程文件,选择单文档应程序;
步骤2:
利用ResourceView设计菜单,如图6-1所示;
图6-1菜单设计示例菜单
选项
绘图(&P)
Pop-up=Checked
菜单项
ID值
提示(Prompt)
直线
m_line
两点直线
圆
m_circle
画圆,圆心和半径
椭圆
m_ellipse
绘制椭圆
矩形
m_rectangle
绘制矩形
添加方法:
选择View\ClassWizard菜单项,弹出如图3-19所示的创建类对话框,从中选择工程名(Projects)和类名(Classname),并从ObjectIDs列表框中选择m_line项,在Messages列表框中选择COMMAND,然后,单击“AddFunction”按钮,弹出加入成员函数的对话框,输入成员函数名OnMLine,确定后就添加了OnMLine消息映射函数。
参照以上方法,添加上表中其他的函数。
步骤4:
绘制直线
按照第4章实验一任务三的步骤,实现交互式绘直线;
按照第4章实验二,实现交互式画圆;
但需要做如下的修改:
(1)加入成员变量m_item,用于表示绘图选择项,
proctected:
intm_item;//0:
不绘图,1:
直线,2:
圆,3:
椭圆,4:
矩形;
(2)在构造函数中初始化变量;
CJhsView:
:
CJhsView()
{
//TODO:
addconstructioncodehere
//画直线的初始化参数
m_p1.x=0;m_p1.y=0;//起点
m_p2.x=0;m_p2.y=0;//终点
m_ist=0;//0,第1点;1,第2点;
m_item=0;//0:
不绘图,1:
直线,2:
圆,3:
椭圆,4:
矩形
//
m_bO.x=0;m_bO.y=0;//圆心
m_bR.x=0;m_bR.y=0;//圆上的点
//m_ist=0;//圆心与圆上的点区别
m_r=0;//圆的半径
}
(3)添加菜单驱动函数:
方法是右击CjhsView类,选择消息映射函数(addwindowmessagehandler…)。
在弹出的对话框中的classorobjecttohandle列表中选择m_ine,按下“addandedit”,并在弹出的对话框中输入菜单驱动函数的名字(OnMLine),按下“确定”键。
同理,建立画圆的菜单驱动程序OnMCircle。
voidCJhsView:
:
OnMLine()
{
//TODO:
Addyourcommandhandlercodehere
m_item=1;
}
voidCJhsView:
:
OnMCircle()
{
//TODO:
Addyourcommandhandlercodehere
m_item=2;
}
(4)在OnDraw()中不进行绘图,主要靠鼠标绘图。
voidCJhsView:
:
OnDraw(CDC*pDC)
{
CJhsDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
//画直线
//Redraw(pDC);
//调用自定义的成员函数,用鼠标画直线
}
(5)鼠标左击和移动程序
voidCJhsView:
:
OnLButtonDown(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CDC*pDC=GetDC();
pDC->SelectStockObject(NULL_BRUSH);
//chartbuf[10];
//sprintf(tbuf,"m_item=%3d",m_item);
//AfxMessageBox(tbuf);
if(m_item==1)//绘直线
{
if(!
m_ist)//是起点
{
m_p1=m_p2=point;//纪录第一次单击鼠标位置,定圆心
m_ist++;
}
else
{
m_p2=point;//记录第二次单击鼠标的位置,定终点的点
m_ist--;//为新绘图作准备
DDAMouseLine(pDC,m_p1.x,m_p1.y,m_p2.x,m_p2.y,RGB(255,0,0));//绘制新直线
}
}
elseif(m_item==2)//绘圆
{
//CDC*pDC=GetDC();
//pDC->SelectStockObject(NULL_BRUSH);
if(!
m_ist)//绘制圆
{
m_bO=m_bR=point;//纪录第一次单击鼠标位置,定圆心
m_ist++;
}
else
{
m_bR=point;//记录第二次单击鼠标的位置,定圆周上的点
m_ist--;//为新绘图作准备
m_r=ComputeRadius(m_bO,m_bR);
MidpointCircle(pDC,m_bO.x,m_bO.y,m_r,RGB(255,0,0));
}
}
ReleaseDC(pDC);//释放设备环境
CView:
:
OnLButtonDown(nFlags,point);
}
voidCJhsView:
:
OnMouseMove(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
CDC*pDC=GetDC();
if(m_item==1)//绘直线
{
intnDrawmode=pDC->SetROP2(R2_NOT);//设置异或绘图模式,并保存原来绘图模式
pDC->SelectStockObject(NULL_BRUSH);
if(m_ist==1)
{
CPointprePnt,curPnt;
prePnt=m_p2;//获得鼠标所在的前一位置
curPnt=point;
//绘制橡皮筋线
DDAMouseLine(pDC,m_p1.x,m_p1.y,prePnt.x,prePnt.y,RGB(255,0,0));
//DrawCircle(pDC,m_bO,prePnt);//用异或模式重复画圆,擦出所画的圆
DDAMouseLine(pDC,m_p1.x,m_p1.y,curPnt.x,curPnt.y,RGB(255,0,0));
//DrawCircle(pDC,m_bO,curPnt);//用当前位置作为圆周上的点画圆
m_p2=point;
}
pDC->SetROP2(nDrawmode);//恢复原绘图模式
}elseif(m_item==2)//绘圆
{
//CDC*pDC=GetDC();
intnDrawmode=pDC->SetROP2(R2_NOT);//设置异或绘图模式,并保存原来绘图模式
pDC->SelectStockObject(NULL_BRUSH);
if(m_ist==1)
{
CPointprePnt,curPnt;
prePnt=m_bR;//获得鼠标所在的前一位置
curPnt=point;
//绘制橡皮筋线
m_r=ComputeRadius(m_bO,prePnt);
MidpointCircle(pDC,m_bO.x,m_bO.y,m_r,RGB(255,0,0));//用异或模式重复画圆,擦出所画的圆
//DrawCircle(pDC,m_bO,prePnt);
m_r=ComputeRadius(m_bO,curPnt);
MidpointCircle(pDC,m_bO.x,m_bO.y,m_r,RGB(255,0,0));//用当前位置作为圆周上的点画圆
m_bR=point;
}
pDC->SetROP2(nDrawmode);//恢复原绘图模式
}
ReleaseDC(pDC);//释放设备环境
CView:
:
OnMouseMove(nFlags,point);
}
步骤五:
调试、编译、运行程序。
3.3实验体会
在实验进行过程中,虽然经过反复检测,但还是出现了诸多问题,其中有些问题暂未解决。
虽然建立菜单过程中较顺利,但如何将文件中的变量通用还是没有调试好。
虽然实验过程中还存在着较多的未解决的问题和遗憾,但我依然受益匪浅。
通过对实验内容的理解和把握,我掌握图形输入和交互技术的基本方法,也掌握部分图形交互技术的实现方法。
同时,进一步熟练编程语言环境中图形绘制技术。
最重要的是加深了我对图形学的兴趣和认识。
希望在今后的学习中,我可以加强专业技能,早日攻破这些障碍。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 图形 交互 技术 完结