ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:364.80KB ,
资源ID:5210518      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5210518.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(二维绘图工具文档xjh.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

二维绘图工具文档xjh.docx

1、二维绘图工具文档xjh 实验报告计算机图形学实验大作业 课程名称 计算机图形学 实验名称 二维绘图与计算机动画 姓 名 学 号 专业班级 成 绩 指导教师 二维绘图工具文档说明目录1简介 1.1基本绘图功能- 1.2附加功能-2程序代码实现 2.0设计的实现曲线对话框等的类- 2.1鼠标左键按下消息响应函数- 2.2鼠标左键弹起消息响- 2.3鼠标移动消息响应函数- 2.4鼠标右键按下消息响应函数-2.5选择绘画类型消息相应函数- 2.6画直线线函数- 2.7画有向箭头的函数- 2.8画长方形函数- 2.9画圆函数- 2.10画椭圆函数- 2.11点击“撤消” 消息响应函数- 2.12点击“清

2、空”消息响应函数- 2.13点击“设置线宽线形”消息响应函数- 2.14点击“设置颜色”消息响应函- 2.15点击“设置字体”消息响应函数- 2.16点击“打开bmp格式测试文件”消息响应函数-3程序的运行结果3.1启动图片-3.2打开的测试图片-3.3运行程序界面-4总结 4.1 程序的问题和缺陷-4.2通过这次编写程序的认知和感触-1简介 使用VC开发平台,MFC框架实现一个画图程序,尽可能多的实现Windows自带的画图功能,并扩展其功能。在视图类中完成图形的绘制,显示,重绘,清空,撤消,设置画笔,设置字体,打开bmp图片。在文档类保存了,画笔的信息。1.1基本绘图功能:1) 用鼠标可以

3、绘制图形,包括一下几种:直线,带箭头的线,任意线,圆形,椭圆,矩形。2) 可以对画笔进行设置:画笔的颜色,画笔的线宽,画笔的形状。3) 可以保存所有的图形到内存中,所有图形绘制后,拉动窗口发生重绘不改变。4) 可以将所有绘制的图形保存到文件中,并且可以读取。5) 可以“新建”空白绘图文档。6) 可以查看最近打开的文档。7) 可以打印用户绘制好后的图形,打印预览你绘制的图形。8) 可以完成一部分的“撤消”功能,1.2附加功能:(1) 应用程序的标题栏上有程序的图标。(2) 可选择打开或关闭工具栏。(3) 可以打开一些文件中放的测试图片。、(4) 有一个开机启动画面。(5)有个绘图工具栏。2程序实

4、现的主要代码/实现文件IMPLEMENT_SERIAL( CGraph, CObject, 1 )/文档串行化的 宏定义DECLARE_SERIAL( CGraph )CGraph:CGraph()CGraph:CGraph(UINT DrawIndex,CPoint FirstPoint,CPoint SecondPoint,COLORREF color,UINT LineWidth,int LineStyle)/5 this-m_DrawIndex = DrawIndex; this-m_FirstPoint = FirstPoint; this-m_SecondPoint= Second

5、Point; this-m_color = color; this-m_nLineStyle = LineStyle; this-m_nLineWidth = LineWidth;CGraph:CGraph()void CGraph:Draw(CDC *pDC)/CGraph m_DrawIndex CPen hpen(m_nLineStyle,m_nLineWidth,m_color); CBrush *pBrush = CBrush:FromHandle(HBRUSH)GetStockObject(NULL_BRUSH); CBrush *pOldBrush = pDC-SelectObj

6、ect(pBrush); switch(m_DrawIndex) case 1: pDC-SelectObject(&hpen); pDC-MoveTo(m_FirstPoint); pDC-LineTo(m_SecondPoint); break; case 2: break; case 3: float flRlt; flRlt=(float)(m_FirstPoint.x-m_SecondPoint.x)*(m_FirstPoint.x-m_SecondPoint.x)+(m_FirstPoint.y-m_SecondPoint.y)*(m_FirstPoint.y-m_SecondPo

7、int.y); flRlt=sqrt(flRlt); if(flRlt = 0) return; float flLength = 15; float flAngle = 100;/ float tmpX = (float)(m_SecondPoint.x) + (float)(m_FirstPoint.x)-(float)(m_SecondPoint.x)*flLength/flRlt; float tmpY = (float)(m_SecondPoint.y) + (float)(m_FirstPoint.y)-(float)(m_SecondPoint.y)*flLength/flRlt

8、; float fl1X = (tmpX-(float)(m_SecondPoint.x)*cos(-flAngle/2) - (tmpY-(float)(m_SecondPoint.y)*sin(-flAngle/2) + (float)(m_SecondPoint.x); float fl1Y = (tmpY-(float)(m_SecondPoint.y)*cos(-flAngle/2) + (tmpX-(float)(m_SecondPoint.x)*sin(-flAngle/2) + (float)(m_SecondPoint.y); float fl2X = (tmpX-(floa

9、t)(m_SecondPoint.x)*cos(flAngle/2) - (tmpY-(float)(m_SecondPoint.y)*sin(flAngle/2) + (float)(m_SecondPoint.x); float fl2Y = (tmpY-(float)(m_SecondPoint.y)*cos(flAngle/2) + (tmpX-(float)(m_SecondPoint.x)*sin(flAngle/2) + (float)(m_SecondPoint.y); pDC-SelectObject(&hpen); pDC-MoveTo(m_FirstPoint); pDC

10、-LineTo(m_SecondPoint); pDC-MoveTo(m_SecondPoint.x,m_SecondPoint.y); pDC-LineTo(fl1X,fl1Y); pDC-MoveTo(m_SecondPoint.x,m_SecondPoint.y); pDC-LineTo(fl2X,fl2Y); pDC-MoveTo(fl1X,fl1Y); pDC-LineTo(fl2X,fl2Y); break; case 4: pDC-SelectObject(&hpen); pDC-Ellipse(CRect(m_FirstPoint,m_SecondPoint); pDC-Sel

11、ectObject(pOldBrush); break; case 5: pDC-SelectObject(&hpen); pDC-Ellipse(CRect(m_FirstPoint,m_SecondPoint); pDC-SelectObject(pOldBrush); break; case 6: pDC-SelectObject(&hpen); pDC-Rectangle(CRect(m_FirstPoint,m_SecondPoint); pDC-SelectObject(pOldBrush); break; void CGraph:Serialize(CArchive &ar)/C

12、Archive / if(ar.IsStoring() arm_DrawIndexm_FirstPointm_SecondPointm_colorm_nLineWidthm_DrawIndexm_FirstPointm_SecondPointm_colorm_nLineWidthm_nLineStyle; /任意曲线类class CStroke : public CObject/public: CStroke(UINT nPenWidth,COLORREF color);protected: CStroke(); DECLARE_SERIAL(CStroke)/ Attributesprote

13、cted: UINT m_nPenWidth; / one pen width applies to entire stroke COLORREF m_color; /颜色public: CArray m_pointArray; / series of connected points/ Operationspublic: BOOL DrawStroke(CDC* pDC);public: virtual void Serialize(CArchive& ar);实现文件CStroke.cppIMPLEMENT_SERIAL(CStroke, CObject, 2)CStroke:CStrok

14、e() / This empty constructor should be used by serialization onlyCStroke:CStroke(UINT nPenWidth,COLORREF color) m_nPenWidth = nPenWidth; m_color = color;void CStroke:Serialize(CArchive& ar) if (ar.IsStoring() ar (WORD)m_nPenWidth w m_color; m_nPenWidth = w; m_pointArray.Serialize(ar); BOOL CStroke:D

15、rawStroke(CDC* pDC) CPen penStroke; if (!penStroke.CreatePen(PS_SOLID, m_nPenWidth, m_color) return FALSE; CPen* pOldPen = pDC-SelectObject(&penStroke); pDC-MoveTo(m_pointArray0); for (int i=1; i LineTo(m_pointArrayi); pDC-SelectObject(pOldPen); return TRUE;/线形状和线宽设置对话框类class CSettingDlg : public CD

16、ialogpublic: CSettingDlg(CWnd* pParent = NULL); /AFX_DATA(CSettingDlg) enum IDD = IDD_DIALOG1 ; UINT m_nLineWidth; /线宽 int m_nLineStyle; /线形状 COLORREF m_color; /线的颜色 /AFX_DATA/ Overrides / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CSettingDlg) protected: virtual void DoDataExchan

17、ge(CDataExchange* pDX); / DDX/DDV support /AFX_VIRTUALprotected: / Generated message map functions /AFX_MSG(CSettingDlg) afx_msg void OnPaint(); /AFX_MSG DECLARE_MESSAGE_MAP();实现文件CSettingDlg.cppCSettingDlg:CSettingDlg(CWnd* pParent /*=NULL*/) : CDialog(CSettingDlg:IDD, pParent) /AFX_DATA_INIT(CSett

18、ingDlg) m_nLineWidth = 0; m_nLineStyle = -1; /AFX_DATA_INITvoid CSettingDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CSettingDlg) DDX_Text(pDX, IDC_EDIT2, m_nLineWidth); DDX_Radio(pDX, IDC_RADIO1, m_nLineStyle); /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CSettingDlg, CDialog

19、) /AFX_MSG_MAP(CSettingDlg) ON_WM_PAINT() /AFX_MSG_MAPEND_MESSAGE_MAP()/ CSettingDlg message handlersvoid CSettingDlg:OnPaint() /这里添加了代码 用于对话框的示例显示 CPaintDC dc(this); / device context for painting / TODO: Add your message handler code here UpdateData(); CPen pen(m_nLineStyle,m_nLineWidth,m_color);/定

20、义画笔 dc.SelectObject(&pen); CRect rect;/定义矩形区域 GetDlgItem(IDC_STATIC1)-GetWindowRect(&rect);/得到示例静态空间的矩形区域 ScreenToClient(&rect);/坐标转换 dc.MoveTo(rect.left+20,rect.top+rect.Height()/2); dc.LineTo(rect.right-20,rect.top+rect.Height()/2); / Do not call CDialog:OnPaint() for painting messages/添加成员变量CTool

21、Bar m_newToolBar 一个新的绘图工具栏/在CMainFrame中的OnCreat()函数中添加的代码:CSplashWnd:ShowSplashScreen(this);/启动画面Sleep(1000);/程序暂停/-新建画图工具栏-/if (!m_newToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) | !m_newToolBar.LoadToolBar(ID

22、R_DRAW_TOOLBAR) TRACE0(Failed to create toolbarn); return -1; / fail to create m_newToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_newToolBar);CMFCDoc.h中public: virtual CMFCDoc(); CPen m_penCur; / pen created according to CTypedPtrList m_strokeList; UINT m_nPen

23、Width; / current user-selected pen width COLORREF m_color; /颜色 CPen* GetCurrentPen(); CStroke* NewStroke(); void InitDocument(); /初始化任意曲线的画笔 void DeleteContents();/删除任意曲线 BOOL OnOpenDocument(LPCTSTR lpszPathName);CMFCDoc.cpp中CStroke* CMFCDoc:NewStroke()/newStroke POSITION pos = GetFirstViewPosition(

24、); CMFCView *pView = (CMFCView*)GetNextView(pos); /获取视类的指针 /获取视类的画笔宽度和颜色 m_nPenWidth = pView-m_nLineWidth; m_color = pView-m_color; CStroke* pStrokeItem = new CStroke(m_nPenWidth,m_color); m_strokeList.AddTail(pStrokeItem); SetModifiedFlag(); / Mark the document as having been modified, for / purposes of confirming File Close. return pStrokeItem;BOOL CMFCDoc:OnNewDocument()/新建空白文档 if (!CDocument:OnNewDocument() return FALSE; / TODO: add reinitialization code here / (SDI documents will reuse this document) /新建空白文档就是把当前的数据全部删除掉 POSITION pos = GetFirstViewPositi

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1