精品课件-计算机图形学-第9章 简单交互式图形系统的设计与实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第9章 简单交互式图形系统的设计与实现
第 9 章 简单交互式图形系统的设计与实现
9.1 系统简介 9.2 系统设计与实现 习题
第9章 简单交互式图形系统的设计与实现
9.1 系统简介
9.1.1 系统用户界面 系统运行界面如图9.1所示。 本系统以Windows画板为设计原型, 在功能上,
给用户提供了画线、 框、 圆、 多边形、 三维立体、 曲线、 填充以及动画、 分形算法程序实现演示等基本 操作, 填充方式根据图形学的概念提供了两种方式, 即 多边形填充和种子填充。
向对象程序设计语言的程序设计方法都支持三种基本的 活动: 识别对象(Object)和类(Class), 描述对象和类之 间的关系, 以及通过描述每个类的功能定义对象的行为。
第9章 简单交互式图形系统的设计与实现
1. 设备环境类 CDC类封装了Windows API中用来画图的函数, 同时该类负责维护设备环境。 CClientDC 类 用 来 创 建 和 破 坏 一 个 设 备 环 境 , 它在堆栈中建立。 CWindowDC 类 维 护 窗 口 的 非 客 户 区 , 和 CClientDC类一样。 CPaintDC 类 在 构 造 函 数 中 调 用 CWnd∷BeginPaint()获得设备环境, 以便在有效的客户 区进行绘图。
第9章 简单交互式图形系统的设计与实现
图 9.1 系统运行界面
第9章 简单交互式图形系统的设计与实现
9.1.2 系统结构 本系统采用树状的层次结构进行组织(如图
9.2所示), 主要包括文档管理、 窗口管理、 图形编辑 管理三大功能模块。 其中文档管理主要完成文档的新建、 保存、 输出打印等功能; 窗口管理定义系统界面风格, 提供对画面编辑区域及工具条、 系统状态面板、 菜单 面板等的显现与隐藏的管理; 图形编辑管理模块主要用 于完成直线、 曲线、 封闭区域等的绘制、 填充、 几 何变换和三维图形的生成、 投影、 消隐及显现。
int nPenStyle; int nWidth; COLORREF LineColor; COLORREF FillColor; Cnewbmp *bmp;
第9章 简单交互式图形系统的设计与实现
int bmpcounter;
int width;
int height;
// Operations
public:
第9章 简单交互式图形系统的设计与实现
enum{ IDD = IDD -JHTXS -FORM }; // NOTE: the ClassWizard will add data
members here //}}AFX -DATA
// Attributes public: // CJhtxsDoc* GetDocument();
BITMAPINFOHEADER bi; //信息头
RGBQUAD* quad;
//调色板
BYTE* lpBuf;
//图像数据
BITMAPINFO* pbi;
int flag;
//标志表示是否打开了bmp文件
int numQuad;
//调色板数目
第9章 简单交互式图形系统的设计与实现
BYTE* lpshowbuf; //用于显示的图像数据 int zoomfactor;
第9章 简单交互式图形系统的设计与实现 CJhtxsAppp
CMainFrame
CJhtxsView
CJhtxsDoc
CDialog
Cnewbmp
CMaterial
CSolid
CLightSouห้องสมุดไป่ตู้ce
CVertex
CRect
CLoop
图 9.3 各类之间的对应关系
CLine
第9章 简单交互式图形系统的设计与实现
第9章 简单交互式图形系统的设计与实现
// ClassWizard generated virtual function overrides //{{AFX -VIRTUAL(CMainFrame) virtual BOOL PreCreateWindow(CREATESTRUCT& cs); //}}AFX -VIRTUAL // Implementation public: virtual ~CMainFrame(); #ifdef -DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif
第9章 简单交互式图形系统的设计与实现
// Overrides
// ClassWizard function overrides
generated
virtual
//{{AFX -VIRTUAL(CJhtxsDoc)
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
第9章 简单交互式图形系统的设计与实现
系统程序模块
文档管理
窗口管理
图形编辑
新
保
打
建
存
印
图形 绘制
图形 变换
区域 填充
画面编辑
系统面
退
区域管理
板管理
出
图 9.2 系统组成结构
第9章 简单交互式图形系统的设计与实现
9.2 系统设计与实现
9.2.1 图形编程的基础知识 VC++是一种面向对象程序设计语言, 基于面
#endif protected:
// Generated message map functions protected:
//{{AFX -MSG(CJhtxsDoc)
第9章 简单交互式图形系统的设计与实现
// NOTE - the ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code ! //}} AFX -MSG DECLARE -MESSAGE -MAP() };
pDX); // DDX/DDV support
第9章 简单交互式图形系统的设计与实现
virtual void OnInitialUpdate(); // called first time after construct
virtual pInfo);
BOOL
OnPreparePrinting(CPrintInfo*
第9章 简单交互式图形系统的设计与实现
用于实现文档的功能; CDialog是工具箱类, 提供人机 消 息 反 馈 平 台 ; Cnewbmp 为 对 象 空 间 类 , 聚 集 着 CSolid( 实 体 类 ) 、 CRect( 面 类 ) 、 CLoop( 环 类 ) 、 Cline(边类)、 CVertex(顶点类)、 CMaterial(材质类)、 CLightSource(光源类)等所有类的对象。 上述各类之间 的对应关系结构如图9.3所示。
1) CMainFrame 主窗口类(CMainFrame)主要定制图标、 工具 条的建立、 显示和交互, 其定义代码如下:
第9章 简单交互式图形系统的设计与实现
class CMainFrame: public CFrameWnd { protected: // create from serialization only CMainFrame(); DECLARE -DYNCREATE(CMainFrame) public: // Attributes public: CToolBar * m -pToolsToolbar; // Operations public: // Overrides
//{{AFX -MSG(CMainFrame)
afx -msg
int
lpCreateStruct);
OnCreate(LPCREATESTRUCT
afx -msg void OnRect();
afx -msg void Ontoolsmenu();
//}}AFX -MSG
DECLARE -MESSAGE -MAP()
// Overrides // ClassWizard generated virtual function
overrides //{{AFX -VIRTUAL(CJhtxsView) public: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: virtual void DoDataExchange(CDataExchange*
第9章 简单交互式图形系统的设计与实现
9.2.2 程序设计 1. 类的设计 本系统主要用到了以下一些类: CJhtxsApp, CMainFrame, CJhtxsView,
CJhtxsDoc, CDialog, Cnewbmp 其中, CJhtxsApp 是应 用程序类, 支持应用程序的建立和基本交互; CMainFrame是应用程序主窗口框架类, 用来实现主窗口 的功能; CJhtxsView是应用程序主窗口视图类, 支持视 图的功能实现; CJhtxsDoc为文档类,
//}} AFX -VIRTUAL
// Implementation
public:
virtual ~CJhtxsDoc();
#ifdef -DEBUG
第9章 简单交互式图形系统的设计与实现
virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const;
第9章 简单交互式图形系统的设计与实现
3) CjhtxsView 视图类(CjhtxsView)接收用户的对特定图形对 象的操作并绘制图形对象, 在界面上改变少, 主要处理 键盘鼠标事件和调用各图形对象的绘制方法, 所以实现 上要尽量统一, 充分利用图形对象的多态性。 以下是其 代码定义:
第9章 简单交互式图形系统的设计与实现
第9章 简单交互式图形系统的设计与实现
CMetaFileDC类创建一个元文件, 可以把它看 做是一个屏幕设备, 但其实它是一个磁盘文件。 产生的 文件可以存放在磁盘中, 以后还可以读入, 进行修改。
第9章 简单交互式图形系统的设计与实现
2. 图形对象类 CBitmap类建立和控制“位图”对象(内存中的位图)。 CBrush类建立和控制“刷子”对象。 填充图形和绘图的刷子。 CFont类建立与控制字体对象。 CPalette类建立和控制调色板对象。 CPen类建立和控制画笔对象, 画笔是图形的边界模式。 CRgn类建立和控制GDI绘图设备区域对象。
第9章 简单交互式图形系统的设计与实现
2) CjhtxsDoc 文档类(CjhtxsDoc)用于实现矢量图形对象的 建立、 存储和读取, 其代码定义如下:
第9章 简单交互式图形系统的设计与实现
class CJhtxsDoc: public CDocument { protected: // create from serialization only CJhtxsDoc(); DECLARE -DYNCREATE(CJhtxsDoc) // Attributes public: // Operations public:
class CJhtxsView : public CFormView { protected: // create from serialization only CJhtxsView(); DECLARE -DYNCREATE(CJhtxsView) public: Ccolordlg *dlg; bool newbmp; bool openbmp; Clinewidth *linewidthdlg; //{{AFX -DATA(CJhtxsView)
virtual void CPrintInfo* pInfo);
第9章 简单交互式图形系统的设计与实现
protected: // control bar embedded members
CStatusBar m -wndStatusBar;
CToolBar m -wndToolBar;
// Generated message map functions
protected:
第 9 章 简单交互式图形系统的设计与实现
9.1 系统简介 9.2 系统设计与实现 习题
第9章 简单交互式图形系统的设计与实现
9.1 系统简介
9.1.1 系统用户界面 系统运行界面如图9.1所示。 本系统以Windows画板为设计原型, 在功能上,
给用户提供了画线、 框、 圆、 多边形、 三维立体、 曲线、 填充以及动画、 分形算法程序实现演示等基本 操作, 填充方式根据图形学的概念提供了两种方式, 即 多边形填充和种子填充。
向对象程序设计语言的程序设计方法都支持三种基本的 活动: 识别对象(Object)和类(Class), 描述对象和类之 间的关系, 以及通过描述每个类的功能定义对象的行为。
第9章 简单交互式图形系统的设计与实现
1. 设备环境类 CDC类封装了Windows API中用来画图的函数, 同时该类负责维护设备环境。 CClientDC 类 用 来 创 建 和 破 坏 一 个 设 备 环 境 , 它在堆栈中建立。 CWindowDC 类 维 护 窗 口 的 非 客 户 区 , 和 CClientDC类一样。 CPaintDC 类 在 构 造 函 数 中 调 用 CWnd∷BeginPaint()获得设备环境, 以便在有效的客户 区进行绘图。
第9章 简单交互式图形系统的设计与实现
图 9.1 系统运行界面
第9章 简单交互式图形系统的设计与实现
9.1.2 系统结构 本系统采用树状的层次结构进行组织(如图
9.2所示), 主要包括文档管理、 窗口管理、 图形编辑 管理三大功能模块。 其中文档管理主要完成文档的新建、 保存、 输出打印等功能; 窗口管理定义系统界面风格, 提供对画面编辑区域及工具条、 系统状态面板、 菜单 面板等的显现与隐藏的管理; 图形编辑管理模块主要用 于完成直线、 曲线、 封闭区域等的绘制、 填充、 几 何变换和三维图形的生成、 投影、 消隐及显现。
int nPenStyle; int nWidth; COLORREF LineColor; COLORREF FillColor; Cnewbmp *bmp;
第9章 简单交互式图形系统的设计与实现
int bmpcounter;
int width;
int height;
// Operations
public:
第9章 简单交互式图形系统的设计与实现
enum{ IDD = IDD -JHTXS -FORM }; // NOTE: the ClassWizard will add data
members here //}}AFX -DATA
// Attributes public: // CJhtxsDoc* GetDocument();
BITMAPINFOHEADER bi; //信息头
RGBQUAD* quad;
//调色板
BYTE* lpBuf;
//图像数据
BITMAPINFO* pbi;
int flag;
//标志表示是否打开了bmp文件
int numQuad;
//调色板数目
第9章 简单交互式图形系统的设计与实现
BYTE* lpshowbuf; //用于显示的图像数据 int zoomfactor;
第9章 简单交互式图形系统的设计与实现 CJhtxsAppp
CMainFrame
CJhtxsView
CJhtxsDoc
CDialog
Cnewbmp
CMaterial
CSolid
CLightSouห้องสมุดไป่ตู้ce
CVertex
CRect
CLoop
图 9.3 各类之间的对应关系
CLine
第9章 简单交互式图形系统的设计与实现
第9章 简单交互式图形系统的设计与实现
// ClassWizard generated virtual function overrides //{{AFX -VIRTUAL(CMainFrame) virtual BOOL PreCreateWindow(CREATESTRUCT& cs); //}}AFX -VIRTUAL // Implementation public: virtual ~CMainFrame(); #ifdef -DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif
第9章 简单交互式图形系统的设计与实现
// Overrides
// ClassWizard function overrides
generated
virtual
//{{AFX -VIRTUAL(CJhtxsDoc)
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
第9章 简单交互式图形系统的设计与实现
系统程序模块
文档管理
窗口管理
图形编辑
新
保
打
建
存
印
图形 绘制
图形 变换
区域 填充
画面编辑
系统面
退
区域管理
板管理
出
图 9.2 系统组成结构
第9章 简单交互式图形系统的设计与实现
9.2 系统设计与实现
9.2.1 图形编程的基础知识 VC++是一种面向对象程序设计语言, 基于面
#endif protected:
// Generated message map functions protected:
//{{AFX -MSG(CJhtxsDoc)
第9章 简单交互式图形系统的设计与实现
// NOTE - the ClassWizard will add and remove member functions here. // DO NOT EDIT what you see in these blocks of generated code ! //}} AFX -MSG DECLARE -MESSAGE -MAP() };
pDX); // DDX/DDV support
第9章 简单交互式图形系统的设计与实现
virtual void OnInitialUpdate(); // called first time after construct
virtual pInfo);
BOOL
OnPreparePrinting(CPrintInfo*
第9章 简单交互式图形系统的设计与实现
用于实现文档的功能; CDialog是工具箱类, 提供人机 消 息 反 馈 平 台 ; Cnewbmp 为 对 象 空 间 类 , 聚 集 着 CSolid( 实 体 类 ) 、 CRect( 面 类 ) 、 CLoop( 环 类 ) 、 Cline(边类)、 CVertex(顶点类)、 CMaterial(材质类)、 CLightSource(光源类)等所有类的对象。 上述各类之间 的对应关系结构如图9.3所示。
1) CMainFrame 主窗口类(CMainFrame)主要定制图标、 工具 条的建立、 显示和交互, 其定义代码如下:
第9章 简单交互式图形系统的设计与实现
class CMainFrame: public CFrameWnd { protected: // create from serialization only CMainFrame(); DECLARE -DYNCREATE(CMainFrame) public: // Attributes public: CToolBar * m -pToolsToolbar; // Operations public: // Overrides
//{{AFX -MSG(CMainFrame)
afx -msg
int
lpCreateStruct);
OnCreate(LPCREATESTRUCT
afx -msg void OnRect();
afx -msg void Ontoolsmenu();
//}}AFX -MSG
DECLARE -MESSAGE -MAP()
// Overrides // ClassWizard generated virtual function
overrides //{{AFX -VIRTUAL(CJhtxsView) public: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); protected: virtual void DoDataExchange(CDataExchange*
第9章 简单交互式图形系统的设计与实现
9.2.2 程序设计 1. 类的设计 本系统主要用到了以下一些类: CJhtxsApp, CMainFrame, CJhtxsView,
CJhtxsDoc, CDialog, Cnewbmp 其中, CJhtxsApp 是应 用程序类, 支持应用程序的建立和基本交互; CMainFrame是应用程序主窗口框架类, 用来实现主窗口 的功能; CJhtxsView是应用程序主窗口视图类, 支持视 图的功能实现; CJhtxsDoc为文档类,
//}} AFX -VIRTUAL
// Implementation
public:
virtual ~CJhtxsDoc();
#ifdef -DEBUG
第9章 简单交互式图形系统的设计与实现
virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const;
第9章 简单交互式图形系统的设计与实现
3) CjhtxsView 视图类(CjhtxsView)接收用户的对特定图形对 象的操作并绘制图形对象, 在界面上改变少, 主要处理 键盘鼠标事件和调用各图形对象的绘制方法, 所以实现 上要尽量统一, 充分利用图形对象的多态性。 以下是其 代码定义:
第9章 简单交互式图形系统的设计与实现
第9章 简单交互式图形系统的设计与实现
CMetaFileDC类创建一个元文件, 可以把它看 做是一个屏幕设备, 但其实它是一个磁盘文件。 产生的 文件可以存放在磁盘中, 以后还可以读入, 进行修改。
第9章 简单交互式图形系统的设计与实现
2. 图形对象类 CBitmap类建立和控制“位图”对象(内存中的位图)。 CBrush类建立和控制“刷子”对象。 填充图形和绘图的刷子。 CFont类建立与控制字体对象。 CPalette类建立和控制调色板对象。 CPen类建立和控制画笔对象, 画笔是图形的边界模式。 CRgn类建立和控制GDI绘图设备区域对象。
第9章 简单交互式图形系统的设计与实现
2) CjhtxsDoc 文档类(CjhtxsDoc)用于实现矢量图形对象的 建立、 存储和读取, 其代码定义如下:
第9章 简单交互式图形系统的设计与实现
class CJhtxsDoc: public CDocument { protected: // create from serialization only CJhtxsDoc(); DECLARE -DYNCREATE(CJhtxsDoc) // Attributes public: // Operations public:
class CJhtxsView : public CFormView { protected: // create from serialization only CJhtxsView(); DECLARE -DYNCREATE(CJhtxsView) public: Ccolordlg *dlg; bool newbmp; bool openbmp; Clinewidth *linewidthdlg; //{{AFX -DATA(CJhtxsView)
virtual void CPrintInfo* pInfo);
第9章 简单交互式图形系统的设计与实现
protected: // control bar embedded members
CStatusBar m -wndStatusBar;
CToolBar m -wndToolBar;
// Generated message map functions
protected: