资源预览内容
第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
第9页 / 共26页
第10页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实验报告计算机图形学实验大作业课程名称 计算机图形学 实验名称 二维绘图与计算机动画 姓 名 学 号 专业班级 成 绩 指导教师 二维绘图工具文档说明目录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.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) 用鼠标可以绘制图形,包括一下几种:直线,带箭头的线,任意线,圆形,椭圆,矩形。2) 可以对画笔进行设置:画笔的颜色,画笔的线宽,画笔的形状。3) 可以保存所有的图形到内存中,所有图形绘制后,拉动窗口发生重绘不改变。4) 可以将所有绘制的图形保存到文件中,并且可以读取。5) 可以“新建”空白绘图文档。6) 可以查看最近打开的文档。7) 可以打印用户绘制好后的图形,打印预览你绘制的图形。8) 可以完成一部分的“撤消”功能,1.2 附加功能:(1) 应用程序的标题栏上有程序的图标。(2) 可选择打开或关闭工具栏。(3) 可以打开一些文件中放的测试图片。 、(4) 有一个开机启动画面。(5)有个绘图工具栏。2程序实现的主要代码/实现文件IMPLEMENT_SERIAL( CGraph, CObject, 1 )/文档串行化的 宏定义 DECLARE_SERIAL( CGraph )CGraph:CGraph()CGraph:CGraph(UINT DrawIndex,CPoint FirstPoint,CPoint SecondPoint,COLORREF color,UINT LineWidth,int LineStyle)/5this-m_DrawIndex = DrawIndex;this-m_FirstPoint = FirstPoint;this-m_SecondPoint= SecondPoint;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-SelectObject(pBrush);switch(m_DrawIndex)case 1:pDC-SelectObject(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_SecondPoint.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;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-(float)(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(pDC-MoveTo(m_FirstPoint);pDC-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(pDC-Ellipse(CRect(m_FirstPoint,m_SecondPoint);pDC-SelectObject(pOldBrush);break;case 5:pDC-SelectObject(pDC-Ellipse(CRect(m_FirstPoint,m_SecondPoint);pDC-SelectObject(pOldBrush);break;case 6:pDC-SelectObject(pDC-Rectangle(CRect(m_FirstPoint,m_SecondPoint);pDC-SelectObject(pOldBrush);break;void CGraph:Serialize(CArchive &ar)/CArchive/m_DrawIndexm_FirstPointm_SecondPointm_colorm_nLineWidthm_nLineStyle;/任意曲线类class CStroke : public CObject/public:CStroke(UINT nPenWidth,COLORREF color);protected:CStroke();DECLARE_SERIAL(CStroke)/ Attributesprotected:UIN
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号