计算机图形学-画金刚石-代码及其操作指导

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

操作指导—金刚石图案

1.建MFC工程Test,选单文档。

2.设置窗口最大化模式,并且标题栏显示文字为:“金刚石图案”。

在BOOL CTestApp::InitInstance()中将m_pMainWnd->ShowWindow(SW_SHOW);改为m_pMainWnd->ShowWindow(SW_MAXIMIZE);//窗口最大化

紧接着加上m_pMainWnd->SetWindowText("金刚石图案");//标题设置

3.二维点类设计:点击类右键出现添加类,或在类向导中添加一个新类,在Name编辑框中输入类名CP2。选Generic Class类

修改CP2的初始定义,添加double 型变量成员x和y。修改后:

class CP2

{

public:

CP2();

virtual ~CP2();

CP2(double,double);//加上

double x;//加上

double y;//加上

};

修改构造函数

CP2::CP2()

{

this->x=0.0;

this->y=0.0;

}

定义重载构造函数

CP2::CP2(double x0,double y0)

{

this->x=x0;

this->y=y0;

}

4.输入对话框类的设计。在资源视图面板Resource View中选Dialog右键选Insert Dialog,删去取消按钮,改窗口为下图:

双击此框,在弹出的框中加上Name:CinputDlg

为输入对话框的控件映射数据成员。在建立类向导中选Member Variables。对IDC_EDIT1映射变量名为m_n,int类型,限制Minimum为3,Maximum为50; 对IDC_EDIT2映射变量名为m_r,double类型,限制Minimum为200.0,Maximum为320.0.OK退出

设置EditBox框的初值.在CinputDlg的构造函数中改为m_n = 30;

m_r = 300.0;

见CinputDlg::CinputDlg(CWnd* pParent /*=NULL*/)

: CDialog(CinputDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CinputDlg)

m_n = 30;

m_r = 300.0;

//}}AFX_DATA_INIT

}

显示:设置EditBox框的初始状态为选中.在类向导中添加消息WM_SHOINDOW的响应函数,在最后加上

void CinputDlg::OnShowWindow(BOOL bShow, UINT nStatus)

{

CDialog::OnShowWindow(bShow, nStatus);

// TODO: Add your message handler code here

GetDlgItem(IDC_EDIT1)->SetFocus();//获取编辑框焦点

((CEdit *)GetDlgItem(IDC_EDIT1))->SetSel(0,-1);//选择编辑框控件内的全部文本

}

5.菜单设计:

下拉菜单文件中的退出ID为ID_APP_EXIT 绘图的金刚石ID为ID_APP_Diamond。

提示为: 绘制金刚石图案.帮助中的关于自己改.在VIEW类中添加”金刚石”子菜单命令响应函数.

6.引入图标:在资源视图中选中Icon中双击IDR_MAINFRAME标识,打开应用程序默认图标并执行编辑中的清除.再引入所需的图标.用复制与粘贴到图标工具上,再对应相应的ID.

7.对话框贴图:从资源视图中导入图片,导入时选所有文件.打开对话框去除不用的控件,加入图片控件,右键打开属性,类型改为位图,图像选中刚导入的.

8.CTestView类的设计:

CP2 *P用于定义一维动态数组存储等分点,int N用于读入等分点个数,double R用于读入圆的半径,它们声明为保护数据成员.自定义公有的void成员函数Diamond(),菜单消息处理函数OnAppDiamond()

在View.h头文件中类定义前加上

#include "P2.h"//包含二维点类头文件

#include "InputDlg.h"//包含输入对话框类头文件

在View.cpp中加上

#include "stdafx.h"

#include "Test.h"

#include "TestDoc.h"

#include "TestView.h"

#define ROUND(a) int(a+0.5)//四舍五入

#include "cmath"//数学头文件

#define PI 3.1415926//圆周率的宏定义

9.加上绘制内容

void CTestView::Diamond()//绘制金刚石图案函数

{

P=new CP2[N];//动态分配内存

CClientDC dc(this);//设置客户区设备上下文

CRect Rect;//定义矩形对象

GetClientRect(&Rect); //获取客户区矩形范围

double theta;//theta为圆的等分角

theta=2*PI/N;

for(int i=0;i

{

P[i].x=R*cos(i*theta);

P[i].y=R*sin(i*theta);

}

for(i=0;i<=N-2;i++)//绘制金刚石图案的外层循环

{

for(int j=i+1;j<=N-1;j++)//绘制金刚石图案的内层循环

{

dc.MoveTo(ROUND(P[i].x+Rect.right/2),ROUND(P[i].y+Rect.bottom/2));

dc.LineTo(ROUND(P[j].x+Rect.right/2),ROUND(P[j].y+Rect.bottom/2));

}

}

delete []P;//动态内存释放

}

10.void CTestView::OnAppDiamond()//金刚石菜单函数

{

// TODO: Add your command handler code here

CInputDlg dlg;//定义输入对话框类对象

if (dlg.DoModal()==IDOK)//调用输入对话框并判断是否单击OK按钮

{

N=dlg.m_n;//输入对话框类数据成员m_n赋给CTestView类数据成员N

R=dlg.m_r;//输入对话框数据成员m_r赋给CTestView类数据成员R }

else

return;

RedrawWindow();//重绘窗口

Diamond();//金刚石菜单调用绘制金刚石图案函数

}

相关文档
最新文档