综合二简易图形编辑器报告

综合二简易图形编辑器报告

ID:25039907

大小:114.00 KB

页数:4页

时间:2018-11-15

综合二简易图形编辑器报告_第1页
综合二简易图形编辑器报告_第2页
综合二简易图形编辑器报告_第3页
综合二简易图形编辑器报告_第4页
资源描述:

《综合二简易图形编辑器报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、综合实验二“简易图形编辑器”实验报告张良钿20048002129一.总体展示:下图是我用自己写的“简易图形编辑器”编辑的图形的全屏截屏图片。图中的“indows”文本,“W”是用四条直线拼合而成。所有图形都是在画出后用鼠标选中并调整位置和形状的,右侧的是非模态窗口的“工具栏”。图形源文件为此压缩包中的sky.sky文件中,可用本编辑软件打开。二.开发过程:1.预期目标(暨需求分析):A.完成基本功能:交互式绘制图形(至少包括矩形和文本),绘制完成的图形能够正确地重现,绘制结果可以保存到文件并读出;B.完成高级要求:矩

2、形、文本的颜色、文本字体可调,能够通过鼠标点击选中图形,并进行属性的修改C.拥有“工具栏”、“状态栏”等,使程序具有更好的人机交互性;D.支持“剪贴”、“复制”、“粘帖”、“删除”等操作,能够直接定位图元并编辑。2.数据结构选择(开发中最重要的环节):由于对C++还不熟悉,因此考虑的都还是C中的方法。用结构封装图元和文本,图元结构MYGRAP和文本结构MYTEXT,详见源程序中的MyDoc.h文件。使用动态申请内存的数据存储方法,具体的方案考虑过三种,具体如下:A.动态数组:像梁老师上课时介绍的那样,当存储空间不足时

3、,new出更大的一块内存,然后memcpy,再delete原空间。优点:简单,易于理解和操作。缺点:运行效率不高,尤其是当数据量较大时,每次都要向内存池申请一块很大的连续的内存,然后memcpy大量数据,浪费了大量内存和CPU运行时间,虽然现在的内存和CPU性能很好,但它们是给用户用的,而不是给程序员使用的。因此在不影响开发效率的情况下,应尽量提高运行效率。A.双向链表:链表的运行效率明显高于动态数组,且易于构建图层的优先级结构(即图元重叠是的上下顺序)。故在刚开始的时候,我采用了双向链表的结构,并完成了双向链表相关

4、函数的编写(在MyDoc.cpp文件末尾被注释的部分)。但在开发过程中,由于需要能根据图层序号直接定位图层,这样就需要从链头或链尾搜索。于是萌生了对链表进行改造的想法。B.映射表:我不是是否有这种数据结构,也不知道它的正确名称,因为这是我自己构思出的,姑且称其为“映射表”。它由一系列动态的离散的节点和一个动态的数组表构成。详细结构如下图所示:PointerPointerPointerPointer……PointerPointerPointerMYGRAPMYTEXTMYGRAPMYGRAPMYGRAPMYTEXT映射

5、表中的每一个元素都是一个指针,指向不同的离散的MYGRAP或MYTEXT的结构便量。表的管理策略同动态数组一样,先申请一个一定长度的数组,当表不够长时,new出一个更长的数组,然后memcpy,再删除原数组。由于数组的每个元素存储的只是一个指针,占用的内存很小,只需很少的资源即可动态整理。每个节点的管理策略同链表的节点相同,都是new和delete的。映射表的优点:运行和存储效率基本接近链表,但可以根据层序号直接定位图元节点,所有的添加、删除、查找、插入、交换层顺序等操作都只需要对映射表进行整理即可,操作方便快速。缺

6、点:增加了一个结构层次,不易理解。经比较,我选择了映射表的结构,由于MYGRAP和MYTEXT两种结构不同,尤其是MYTEXT中还有一个字符串指针,因此虽然从存储原理上两种结构的指针没有区别,但仍需一个PMYGRAP和一个PMYTEXT分别指向才能通过编译,连void*也不行。于是构造了一个新结构LAYERMAP作为映射表数组的元素,如下:typedefstruct_LAYERMAP_{intiFlg;//GRAPDATAorTEXTDATA,PMYGRAPpGData;PMYTEXTpTData;//void*pD

7、ata;//pointertoMYGRAPorMYTEXT}LAYERMAP,*PLAYERMAP;每次在访问图元节点时都要先判断iFlg,再决定使用pGData还是pTData,增加了程序的复杂度,不得以而为之,应该还有更好的解决策略,我还没想到。数据结构及其相关函数在源文件MyDoc.cpp中,函数的设置有点C++的味道,可以方便地做成一个类。3.具体开发:选定数据结构,写好MyDoc.cpp后,工作以及完成了一半。很快就完成了基本功能的实现和调试。开始完成扩展功能。A.实现鼠标选中图元和编辑图元。希望能实现类似

8、MS-Word中的图形编辑那样的效果。a.鼠标点击选中最外层的图元,编写函数boolSearchLayer(POINT*a_pPT,int*pCurLayerCnt),其中调用了判断点在直线上的函数boolPointInLine(POINT*a_pt,POINT*a_pStart,POINT*a_pEnd,inta_LineWidth),判断点

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。