计算机图形学上机实验2-交互实现多边形绘画并填充

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2-交互计算机图形学上机实验

实现多边形绘画并填充

昆明理工大学理学院

信息与计算科学专业操作性实验报告

年级:10级姓名:刘陈学号:201011101128 ____________________ 指导教师:胡杰

实验课程名称: 计算机图形学程序设计开课实验室: 理学院机房216

实验成绩:

实验内容:

1 •实验/作业题目:用计算机高级语言VC++6.0实现计算机的基本图元绘制

2 .实验/作业课时:2学时

3 .实验过程(包括实验环境、实验内容的描述、完成实验要求的知识或技能):

实验环境:(1 )硬件:每人一台PC机

(2)软件:windows OS , VC++6.0 或

以上版本。

试验内容及步骤:

(1 )在VC++环境下创建MFC应用程序工程(单文档)

(2 )编辑菜单资源

(3)添加菜单命令消息处理函数

(4)添加成员函数

(5)编写函数内容试验要求

(1 )试验前自习课本第2章内容,编写相关程序。建立一VC++单文档工程,在菜单项中建立图形绘图菜单(包括绘制直线、折线、矩形、(椭)圆、多边形)和区域填充菜单项。

(2 )实现对(椭)圆和多边形的填充。

(3)试验中调试、完善所编程序,能正确运行出设计要求结果。

(4)书写试验报告上交。

5 •算法描述、流程图或操作步骤:

在 lab2View.h 文件中的public内添加变量

CPoi nt v[30];

int in dex;

bool first;

bool move;

在lab2View.cpp 文件中的函数CLab2View::CLab2View() 下添加如下代码:

4 •程序结构(程序中的函数调用关系图)

in dex = 1; //定义工作区

first = true;

move = false;

添加对应于鼠标消息 WM_LBUTTONDDlClK 的消息处理函数

OnLButtonDblClk();

并在其中添加如下代码:

CClientDC dc(this);

dc.MoveTo(v[index]);

dc.LineTo(v[0]);

CPen MyPen,*OldPen; // 颜色填充

MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255));

OldPen=dc.SelectObject(&MyPen);

CBrush MyBrush,*OldBrush; MyBrush.CreateSolidBrush(RGB(0,255,0));

OldBrush=dc.SelectObject(&MyBrush);

//dc.SelectStockObject(GRAY_BRUSH);

dc.Polygon(v,index+1);

first = true;

move = false;

index = 1;

添加对应于鼠标消息 WM_LBUTTONDOWN 的消息处理函数

OnLButtonDown();

并在其中添加如下代码:

CClientDC dc(this);

if (first)

{ v[0] = v[1] = point;

first = false; }

else

{ v[++index] = point;

if (index>=30)

{ MessageBox("数组 CPoint v[30] 下标越界 !\a"); return; }

dc.MoveTo(v[index-1]);

dc.LineTo(v[index]);

}

添加对应于鼠标消息 WM_LBUTTONUP 的消息处理函数 OnLButtonUp(); 并在其中添加如下代码:

CClientDC dc(this);

dc.MoveTo(v[index-1]);

dc.LineTo(v[index]);

if (!move)

first = true;

添加对应于鼠标消息 WM_ MOUSEMOVE 的消息处理函数OnMouseMove ();

并在其中添加如下代码:

CClientDC dc(this);

if (nFlags == MK_LBUTTON)

{ move = true;

dc.SetROP2(R2_NOTXORPEN);

dc.MoveTo(v[index-1]);

dc.LineTo(v[index]);

v[index] = point;

dc.MoveTo(v[index-1]);

dc.LineTo(v[index]);

}

添加菜单项 ID_ Fillcolor 的消息映射函数添加任何代码 :

CClientDC dc(this); //自动生成多边形并填充CPen MyPen,*OldPen;

MyPen.CreatePen(PS_SOLID,1,RGB(0,0,255));

OldPe n=dc.SelectObject(&MyPe n);

CBrush MyBrush,*OldBrush;

MyBrush.CreateSolidBrush(RGB(100,55,150));

OldBrush=dc.SelectObject(&MyBrush);

CPoi nt p[4];

p[0].x=100;p[0].y=200;

p[1].x=250;p[1].y=150;

p[2].x=200;p[2].y=300;

p[3].x=400;p[3].y=350;

dc.Polygo n( p,4);

6 •实验数据和实验结果(用屏幕图形表示,可另加附页):

打开Dubug内lab2.exe点击菜单栏“多边形绘画及填充”,在工作区绘

画多边形,画好后双击左键便完成填充了。还有另加一个自动绘画多边形并填充的选项。结果如下:

相关文档
最新文档