实验三_图形交互技术(完结版).doc

上传人:wj 文档编号:584455 上传时间:2023-04-29 格式:DOC 页数:6 大小:45KB
下载 相关 举报
实验三_图形交互技术(完结版).doc_第1页
第1页 / 共6页
实验三_图形交互技术(完结版).doc_第2页
第2页 / 共6页
实验三_图形交互技术(完结版).doc_第3页
第3页 / 共6页
实验三_图形交互技术(完结版).doc_第4页
第4页 / 共6页
实验三_图形交互技术(完结版).doc_第5页
第5页 / 共6页
实验三_图形交互技术(完结版).doc_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验三_图形交互技术(完结版).doc

《实验三_图形交互技术(完结版).doc》由会员分享,可在线阅读,更多相关《实验三_图形交互技术(完结版).doc(6页珍藏版)》请在冰点文库上搜索。

实验三_图形交互技术(完结版).doc

《计算机图形学》

实验报告

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实验体会

在实验进行过程中,虽然经过反复检测,但还是出现了诸多问题,其中有些问题暂未解决。

虽然建立菜单过程中较顺利,但如何将文件中的变量通用还是没有调试好。

虽然实验过程中还存在着较多的未解决的问题和遗憾,但我依然受益匪浅。

通过对实验内容的理解和把握,我掌握图形输入和交互技术的基本方法,也掌握部分图形交互技术的实现方法。

同时,进一步熟练编程语言环境中图形绘制技术。

最重要的是加深了我对图形学的兴趣和认识。

希望在今后的学习中,我可以加强专业技能,早日攻破这些障碍。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2