基本画图版.doc_第1页
基本画图版.doc_第2页
基本画图版.doc_第3页
基本画图版.doc_第4页
基本画图版.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机图形学课程设计 题目:二维基本图形绘制系统 姓名:章胜仁 学号:1021140222班级:10211402专业:数字媒体技术指导老师:刘琳 2012年6月29日一、课程设计目的问题:二维基本图形绘制系统1、创建应用程序窗口框架。2、菜单设计并完成相应功能,包括文件(保存、打印预览、打印、退出)、基本图形(直线、折线、圆、椭圆、矩形、多边形)、图形变换(旋转、平移、缩放)、绘图工具(颜色、线宽、填充、)帮助等菜单。3、设计与上述各功能菜单项关联的工具栏和状态栏。二、课程设计内容设计及分析1、运用的通过工具主要为VC+6.0编程工具2、制作不同的工具栏、包括基本图形、画笔线宽、画刷、铅笔、画笔颜色3、在原有菜单项加入菜单项,并为其添加映射函数,用来控制背景颜色的 改变、基本图形的变换等4、状态栏中可以显示当前时间和鼠标移动时的坐标5、程序添加了橡皮筋技术功能,在绘制图形时可以预先看到图形打的位置三、 程序的拓扑结构图 二维基本图形绘制系统基本图形的绘制绘图工具的使用画笔、画刷属性的改变背景颜色、图形基本变换un四、 设计的具体步骤1、创建一个单文档应用程序。2、制作菜单栏和工具栏,为菜单栏和工具栏添加消息响应,调用以下功能。并添加多个工具栏以便使用。3、制作选择画图程序,画出矩形、直线、椭圆、圆角矩形、五角星行、五边形、弓形、弧形、三角形等。主要在视图类中使用各种函数画出不同的图形。在选择时主要运用switch语句。3、创建刷子、铅笔、橡皮工具,在MouseMove中实现,在拖拽时画出轨迹。橡皮是画笔较宽白色的曲线。铅笔的宽度永远是1,而刷子的宽度可以任意改变。4、为画图程序创建画笔和画刷,通过变量控制画笔画刷的颜色及样式。画笔有点线、虚线、点划线等,使所画图形更美观。可以使用阴影画刷,位图填充使画刷样式有更多选择。5创建一个改变画笔粗细的工具栏。6图形、画笔和画刷的选择主要使用switch case语句7、创建输入文本的对话框,并且能使文本书写的位置由用户鼠标的位置8、添加滚动视图、状态栏中的鼠标坐标及时间的显示。9、在工具栏中创建像画图工具中相同的调色板。将菜单的栏的功能放在工具来,可以改变画笔的颜色。10、添加右键单击快捷菜单(浮动菜单)。11、可以改变背景的颜色五、 设计最终的结果实现画图改变背景颜色六、 课程设计代码1、 添加工具栏的代码int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)if (CFrameWnd:OnCreate(lpCreateStruct) = -1)return -1;if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) |!m_wndToolBar.LoadToolBar(IDR_TOOLBAR3)TRACE0(Failed to create toolbarn);return -1; / fail to createif (!m_wndStatusBar.Create(this) |!m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)TRACE0(Failed to create status barn);return -1; / fail to createint NRES=m_wndOpBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_LEFT| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,CRect(30,0,0,0),AFX_IDW_TOOLBAR); if (!NRES| !m_wndOpBar.LoadToolBar(IDR_TOOLBAR2)TRACE0(Failed to create tool barn);return -1; / fail to create int NRE=m_wndOpBar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_RIGHT| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,CRect(30,0,0,0),AFX_IDW_TOOLBAR); if (!NRE| !m_wndOpBar1.LoadToolBar(IDR_TOOLBAR1)TRACE0(Failed to create tool barn);return -1; / fail to createint NR=m_wndOpBar2.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_LEFT| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC,CRect(30,0,0,0),AFX_IDW_TOOLBAR); if (!NR| !m_wndOpBar2.LoadToolBar(IDR_TOOLBAR4)TRACE0(Failed to create tool barn);return -1; / fail to create/ TODO: Delete these three lines if you dont want the toolbar to/ be dockablem_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);DockControlBar(&m_wndToolBar); DockControlBar(&m_wndToolBar);DockControlBar(&m_wndToolBar);SetTimer(1,1000,NULL);return 0;2、 鼠标按下映射函数void CDrawToolView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultm_bDrawing=true;start=point;end=point;CScrollView:OnLButtonDown(nFlags, point);3、 鼠标放开左键函数映射void CDrawToolView:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default if (!m_bDrawing ) return; m_bDrawing = false; CPen pen;dialog2 dlg;CBrush brush; CClientDC dc(this); CBrush *pBrush=CBrush:FromHandle(HBRUSH)GetStockObject(NULL_BRUSH);/透明画刷dc.SelectObject(pBrush);POINT pt13=start.x,start.y,point.x,point.y,(point.x+start.x)/2,(point.y+start.y);POINT ps5=start.x-30,start.y,start.x,start.y-28,start.x+30,start.y,start.x+18,start.y+30,start.x-18,start.y+30; POINT pt6=start.x-30,start.y-5,start.x+30,start.y-5,start.x-18,start.y+30,start.x,start.y-28,start.x+18,start.y+30,start.x-30,start.y-5;switch(z)case 1: pen.CreatePen(PS_SOLID,1,color); dc.SelectObject(&pen); break;case 2: pen.CreatePen(PS_SOLID,3,color); dc.SelectObject(&pen); break;case 3: pen.CreatePen(PS_SOLID,5,color); dc.SelectObject(&pen); break;case 4: pen.CreatePen(PS_SOLID,7,color); dc.SelectObject(&pen); break;case 5: pen.CreatePen(PS_SOLID,9,color); dc.SelectObject(&pen); break;case 6: pen.CreatePen(PS_DASH,1,color); dc.SelectObject(&pen); break;case 7: pen.CreatePen(PS_SOLID,40,RGB(255,255,255); dc.SelectObject(&pen); break;default: pen.CreatePen(PS_SOLID,1,color); dc.SelectObject(&pen); break;switch(m)case 1: brush.CreateHatchBrush(3,RGB(0,0,0); dc.SelectObject(&brush); break;case 2: brush.CreateHatchBrush(2,RGB(0,0,0); dc.SelectObject(&brush); break;case 3: brush.CreateHatchBrush(0,RGB(0,0,0); dc.SelectObject(&brush); break;case 4: brush.CreateHatchBrush(4,RGB(0,0,0); dc.SelectObject(&brush); break;case 5: brush.CreateHatchBrush(1,RGB(0,0,0); dc.SelectObject(&brush); break;case 6: brush.CreateHatchBrush(5,RGB(0,0,0); dc.SelectObject(&brush); break;case 7:dc.SelectStockObject(NULL_BRUSH);break;switch(x)case 1: dc.SetPixel(start,RGB(20,0,0);break;case 2: dc.MoveTo(start);dc.LineTo(point);break;case 3:dc.Rectangle(CRect(start,point);break;case 4:dc.Ellipse(CRect(start,point);break;case 5:dc.Arc(CRect(start,point),start,start);break;case 6: dc.RoundRect(start.x,start.y,point.x,point.y,30,30);break;case 7:dc.Arc(CRect(start,point),start,point);break;case 8:dc.Chord(CRect(start,point),point,start);break;case 9:dc.Chord(CRect(start,point),start,point);break;case 10:dc.Polygon(ps,5);break;case 11: dc.Polygon(pt1,3);break;case 12:dc.Polygon(pt,6);break;case 13:if(IDOK=dlg.DoModal() UpdateData(true);str=dlg.m_str;dc.TextOut(start.x,start.y,str);break;case 14: dc.MoveTo(start);dc.LineTo(point);break;CScrollView:OnLButtonUp(nFlags, point);4、 鼠标移动映射函数void CDrawToolView:OnMouseMove(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default if ( !m_bDrawing ) return; POINT pt13=start.x,start.y,end.x,end.y,(end.x+start.x)/2,(end.y+start.y); CClientDC ClientDC(this); int oldpen; CPen pen; switch(z)case 1: pen.CreatePen(PS_SOLID,1,color); ClientDC.SelectObject(&pen); break;case 2: pen.CreatePen(PS_SOLID,3,color); ClientDC.SelectObject(&pen); break;case 3: pen.CreatePen(PS_SOLID,5,color); ClientDC.SelectObject(&pen); break;case 4: pen.CreatePen(PS_SOLID,7,color); ClientDC.SelectObject(&pen); break;case 5: pen.CreatePen(PS_SOLID,9,color); ClientDC.SelectObject(&pen); break;case 6: pen.CreatePen(PS_DASH,1,color); ClientDC.SelectObject(&pen); break;default: pen.CreatePen(PS_SOLID,1,color); ClientDC.SelectObject(&pen);break; switch(x) case 2: ClientDC.DPtoLP(&point); /将设备坐标转换为逻辑坐标 ClientDC.SelectStockObject(NULL_BRUSH); ClientDC.SetROP2(R2_NOTXORPEN); /取反色 ClientDC.MoveTo(start.x,start.y); ClientDC.LineTo(end.x,end.y); end = point; ClientDC.MoveTo(start.x,start.y); ClientDC.LineTo(end.x,end.y); break; case 3: ClientDC.DPtoLP(&point); ClientDC.SelectStockObject(NULL_BRUSH); ClientDC.SetROP2(R2_NOTXORPEN); ClientDC.Rectangle(CRect(start,end); end = point; ClientDC.Rectangle(CRect(start,end); break; case 4: ClientDC.DPtoLP(&point); ClientDC.SelectStockObject(NULL_BRUSH); ClientDC.SetROP2(R2_NOTXORPEN); ClientDC.Ellipse(CRect(start,end); end = point; ClientDC.Ellipse(CRect(start,end); break; case 5: ClientDC.DPtoLP(&point); ClientDC.SelectStockObject(NULL_BRUSH); ClientDC.SetROP2(R2_NOTXORPEN); ClientDC.Arc(CRect(start,end),start,start); end = point; ClientDC.Arc(CRect(start,end),start,start); break; case 6: ClientDC.DPtoLP(&point); ClientDC.SelectStockObject(NULL_BRUSH); ClientDC.SetROP2(R2_NOTXORPEN); ClientDC.RoundRect(CRect(start,end),CPoint(30,30); end = point; ClientDC.RoundRect(CRect(start,end),CPoint(30,30); break; case 7: ClientDC.DPtoLP(&point); ClientDC.SelectStockObject(NULL_BRUSH); ClientDC.SetROP2(R2_NOTXORPEN); ClientDC.Arc(CRect(start,end),start,end); end = point; ClientDC.Arc(CRect(start,end),start,end); break; case 8: ClientDC.DPtoLP(&point); ClientDC.SelectStockObject(NULL_BRUSH); ClientDC.SetROP2(R2_NOTXORPEN); ClientDC.Chord(CRect(start,end),end,start); end = point; ClientDC.Chord(CRect(start,end),end,start); break; case 9: ClientDC.DPtoLP(&point); ClientDC.SelectStockObject(NULL_BRUSH); ClientDC.SetROP2(R2_NOTXOR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论