本站联系方式
   联系QQ  :1095080675
   联系QQ  :1223950575
  技术指导:1353934434
  
  电子邮箱:1095080675@qq.com
标题  计算机图形学论文 - VC实现的简单画图工具
编号  14155
编程语言  Visual C++
开发环境  Visual C++ 6.0
数据库  无
资料明细  论文、源代码(程序)
推荐指数  ★★★★★
论文内容

计算机图形学是研究用计算机进行图形和数据之间转换的方法和技术,是研究用计算机生成、处理、显示图形的一门学科。它在计算机日益普及的今天有着重要的用途,借学这门课的机会和我对计算机科学的热爱,我用VC++把书上的一些图形生成、变换的算法实现了一下,整合成一个小的画图系统VcPaint。以下就对我作的这个系统做个介绍。姑且作为图形学的论文吧。
无论以前是否学过VC,只要稍微自学一下就可以了。主要学的是基于对话框的程序设计。因此做的这个东西自然也是基于对话框的,因为当初选择对话框,所以现在觉得有许多不便之处,建议大家最好用Document的程序设计。
我做的这个图形系统很自然是和老师上课的次序一致逐步向其中添加功能的,首先就是生成直线的算法,这里做了两种:DDA和Bresenham算法。生成圆弧的算法用的是Bresenham算法,后来查阅了相关资料,添加了一个画椭圆的功能,扩展了一下画直线的算法,添加了一个画矩形的算法(其实就是画四条直线)。还想添加画多边形的功能和画圆角矩形的功能,但暂时还没有做。其实添加这两个功能也是很简单的,画多边形也就是若干条直线的连接,圆角矩形也就是在矩形的每个角用一小段圆弧代替,相信很快就会做好。后面的图形变换我实现了四种变换方式,变比、平移、旋转、错切。都是根据书上的算法思想自己编程实现的。填充算法我也实现了,可以对任何闭合图形进行填充,我使用的算法是:扫描线算法。此外,我还提供了对已经画的图形的保存功能,想通过打开文件自动读取文件中的符合格式的信息自动画图,这个功能尚在实现之中。我这个程序支持鼠标画图和键盘参数输入画图两种方式,关于鼠标画图的画图类型选择的问题,我提供了通过RadioButton选择的方式,正准备添加一个通过可视化的CToolBar(工具栏)来选择画图形的类型的功能,翻阅了很多书籍加上请教老师,我已经把如何在对话框里加载工具栏这个困扰我很长时间的问题解决了。相信自己有能力做出个MINI_AUTOCAD
VC功能强大,利用MFC向导就可以轻而易举地完成个可执行程序。同样,它提供了很多控件,可视化的程序设计界面让编程变得容易了许多,对于DialogBase应用程序来说,建立一个Dialog Based应用程序,向里面添加控件,对各个控件映射变量,添加函数,编写相关代码实现有关功能就可以了。
言归正传,下面就按照我做的顺序分阶段地介绍一下我做这个程序的基本过程:
首先用VC自动生成一个DialogBase应用程序,删掉其中的Static控件,向里面添加控件。刚开始,只是添加了几个Edit,用于输入画直线和圆的参数,然后添加两个Button,分别命名为DrawLine和DrawCircle。利用VC的ClassWizard为以上添加的Edit控件分别映射变量,类型为int。为Button分别添加函数,在函数里面添加画图的代码,具体代码见附件源代码。这样的话,一个简单的画线画圆的东西就做好了。接下来考虑的是要学Windows自带的画图程序里面的操作,即支持鼠标画图,用鼠标拖动即可画图形。这样,显然要对这个对话框添加相应得消息响应函数,这里我添加了如下几个鼠标事件函数:
1. 双击鼠标在双击的点画一个点,颜色为预设。
2. 按住鼠标左键,选择画图功能的“拖动鼠标画直线”在画图客户区拖动,从按下的点画条直线到鼠标松开的点。
3. 按住鼠标,选择画图功能的“拖动鼠标画矩形”,可以从鼠标按下的地方为矩形的左上角,以鼠标松开的地方为矩形的右下角画个矩形。
4. 按住鼠标左键,选择画图功能的“拖动鼠标画圆”,可以以鼠标按下的点为圆心,拖动的距离为半径画个圆,颜色为预设。
5. 还有个功能叫所动即所画,比较有趣。
6. 此外,为了防止鼠标的动作总是对应相应的消息,添加了一个取消选择按钮。
这个地方有个问题至今尚未解决,就是如何利用所谓的“橡皮筋”技术画线,因为我的程序基于对话框,所以难以实现这个技术,不过我一直在考虑怎么实现。
以上的功能选择是通过5个RadioButton来实现的,当然外面还有个Group控件。当选择了该Group控件内的某个功能,就可以通过鼠标进行相应的操作了,相应函数对应的消息分别为:WM_LBUTTONDOWN、WM_LBUTTONUP、WM_LBUTTONDBLCLK、WM_MOUSEMOVE。具体的函数代码在此不再赘述。请参考本文附带源程序。
我们需要设计几个类,用于保存程序中所画的图形,后来添加的保存至文件的功能也是基于这几个类实现的。在此就不多说了。
接下来开始考虑对图形实现变换,同样利用了一个Group,但是这时,我用的是ComBox控件来选择要变换的图形,关于ComBox控件输入数据需要特别指出,要以Ctrl+Enter输入下一个数据,否则程序会自动返回。从上到下控件分别为:
1. 选择变换的图形功能,用ComBox下拉列表供用户选择。具体数据有:
直线、圆、矩形。同时为这个控件映射一个CString类型的变量。用作存储所选择的内容
2.一个Edit控件,让用户输入要变换的图形编号,映射一个int类型的变量。
3. 选择执行何种变换的功能,. 用ComBox下拉列表供用户选择。具体数据有:
平移、旋转、变比。同时为这个控件映射一个CString类型的变量。用作存储所选择的内容
4.添加两个Edit控件,让用户输入变换的参数,分别映射float类型的变量。这里对于上面图形和变换的不同选择,这两个变量自然有不同的意义,这里顺便介绍一下:当然用户也可以参考程序中的About或帮助文档。
//执行对已经存在的图形的变换时,如果选择的是平移,那么,在下面的文本输入框内//顺序输入平移的x,y大小,如果选择变比,需要在文本框里输入变比的倍数,如果是//旋转,在文本框里输入旋转的角度和顺序(顺/逆_时针),然后执行变换即可.
5.最后添加一个Button控件,用于执行变换,对这个按钮添加一个事件处理函数,
void OnOK() 在里面写代码,分别处理图形变换的所有情况。具体代码不列出

运行截图
演示下载  
作品说明
  以上是系统简介。如果对以上内容感兴趣,可以QQ:1095080675或邮件1095080675@qq.com继续联系我们。
  • 上一篇:基于VC++6.0的关联数据挖掘程序的设计与实现
  • 下一篇:基于VC的管道铺设施工的最佳方案的实现