电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

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

4页
  • 卖家[上传人]:jiups****uk12
  • 文档编号:90687798
  • 上传时间:2019-06-15
  • 文档格式:DOC
  • 文档大小:114.04KB
  • / 4 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、综合实验二 “简易图形编辑器” 实验报告张良钿 20048002129一 总体展示:下图是我用自己写的“简易图形编辑器”编辑的图形的全屏截屏图片。图中的“indows”文本,“W”是用四条直线拼合而成。所有图形都是在画出后用鼠标选中并调整位置和形状的,右侧的是非模态窗口的“工具栏”。图形源文件为此压缩包中的sky.sky文件中,可用本编辑软件打开。二开发过程:1. 预期目标(暨需求分析):A完成基本功能:交互式绘制图形(至少包括矩形和文本),绘制完成的图形能够正确地重现,绘制结果可以保存到文件并读出;B完成高级要求:矩形、文本的颜色、文本字体可调,能够通过鼠标点击选中图形,并进行属性的修改C拥有“工具栏”、“状态栏”等,使程序具有更好的人机交互性;D支持“剪贴”、“复制”、“粘帖”、“删除”等操作,能够直接定位图元并编辑。2. 数据结构选择(开发中最重要的环节):由于对C+还不熟悉,因此考虑的都还是C中的方法。用结构封装图元和文本,图元结构MYGRAP和文本结构MYTEXT,详见源程序中的MyDoc.h文件。使用动态申请内存的数据存储方法,具体的方案考虑过三种,具体如下:A 动态数组:

      2、像梁老师上课时介绍的那样,当存储空间不足时,new出更大的一块内存,然后memcpy,再delete原空间。优点:简单,易于理解和操作。缺点:运行效率不高,尤其是当数据量较大时,每次都要向内存池申请一块很大的连续的内存,然后memcpy大量数据,浪费了大量内存和CPU运行时间,虽然现在的内存和CPU性能很好,但它们是给用户用的,而不是给程序员使用的。因此在不影响开发效率的情况下,应尽量提高运行效率。B 双向链表:链表的运行效率明显高于动态数组,且易于构建图层的优先级结构(即图元重叠是的上下顺序)。故在刚开始的时候,我采用了双向链表的结构,并完成了双向链表相关函数的编写(在MyDoc.cpp文件末尾被注释的部分)。但在开发过程中,由于需要能根据图层序号直接定位图层,这样就需要从链头或链尾搜索。于是萌生了对链表进行改造的想法。C 映射表:我不是是否有这种数据结构,也不知道它的正确名称,因为这是我自己构思出的,姑且称其为“映射表”。它由一系列动态的离散的节点和一个动态的数组表构成。详细结构如下图所示:PointerPointerPointerPointerPointerPointerPoin

      3、terMYGRAPMYTEXTMYGRAPMYGRAPMYGRAPMYTEXT映射表中的每一个元素都是一个指针,指向不同的离散的MYGRAP或MYTEXT的结构便量。表的管理策略同动态数组一样,先申请一个一定长度的数组,当表不够长时,new出一个更长的数组,然后memcpy,再删除原数组。由于数组的每个元素存储的只是一个指针,占用的内存很小,只需很少的资源即可动态整理。每个节点的管理策略同链表的节点相同,都是new和delete的。映射表的优点:运行和存储效率基本接近链表,但可以根据层序号直接定位图元节点,所有的添加、删除、查找、插入、交换层顺序等操作都只需要对映射表进行整理即可,操作方便快速。缺点:增加了一个结构层次,不易理解。经比较,我选择了映射表的结构,由于MYGRAP和MYTEXT两种结构不同,尤其是MYTEXT中还有一个字符串指针,因此虽然从存储原理上两种结构的指针没有区别,但仍需一个PMYGRAP和一个PMYTEXT分别指向才能通过编译,连void *也不行。于是构造了一个新结构LAYERMAP作为映射表数组的元素,如下:typedef struct _LAYERMAP_i

      4、ntiFlg;/ GRAPDATA or TEXTDATA,PMYGRAP pGData;PMYTEXT pTData;/void*pData;/ pointer to MYGRAP or MYTEXT LAYERMAP, *PLAYERMAP;每次在访问图元节点时都要先判断iFlg,再决定使用pGData还是pTData,增加了程序的复杂度,不得以而为之,应该还有更好的解决策略,我还没想到。数据结构及其相关函数在源文件MyDoc.cpp中,函数的设置有点C+的味道,可以方便地做成一个类。3. 具体开发:选定数据结构,写好MyDoc.cpp后,工作以及完成了一半。很快就完成了基本功能的实现和调试。开始完成扩展功能。A 实现鼠标选中图元和编辑图元。希望能实现类似MS-Word中的图形编辑那样的效果。a. 鼠标点击选中最外层的图元,编写函数bool SearchLayer(POINT *a_pPT, int *pCurLayerCnt),其中调用了判断点在直线上的函数bool PointInLine(POINT *a_pt, POINT *a_pStart, POINT *a_pEnd,

      5、int a_LineWidth),判断点在矩形内的函数bool PointInRect(POINT *a_pt, POINT *a_pStart, POINT *a_pEnd),判断点在椭圆内的函数bool PointInEllipse(POINT *a_pt, POINT *a_pStart, POINT *a_pEnd)。编写加调试共约2小时,对数学公式做了化简和近似,确保了运算量的最小化,调试结果良好,矩形、椭圆、直线、文本框都能准确辨认。b. 绘制图元被选中时的标志(外框上的四个小圆和四个小矩形)以及鼠标在图元附件的不同Cursor。编写了函数bool DrawSltFlg(HDC hdc, PMYGRAP a_pFlgGrap, PLAYERMAP a_pLayer, int a_DrawOrClear),和bool DrawSltFlg(HDC hdc, PMYGRAP a_pFlgGrap, PLAYERMAP a_pLayer, int a_DrawOrClear),并大量增补了主消息处理函数WinProc(),编写加调试用了23小时,实现效果良好。但整个程序结构开始混

      6、乱,尤其是WinProc()过于冗长,程序流程在七种操作模式间跳转,结构不清晰(自己转晕了)。CurrOpMode;#define RYDRAW1/ 预备绘图#define DRAWING2/ 正在绘图#define RYTEXT3/ 准备输入文本#define TEXTRECTING4/ 正在绘制文本矩形框#define TEXTINPUTING5/ 正在输入文本#define RYSELECTAGRAP6/ 预备选择图元#define SELECTEDAGRAP7/ 已经选择中了一个图元#define MOVEINGAGRAP8/ 移动一个图元#define MODIFYINGAGRAP9/ 改变一个图元的形状c. 绘制图元移动和修改过程中的虚线框,编写完代码后发现程序运行混乱了,一时间也查不出原因,就将其删除或注释了,此功能先搁置。d. 移动或修改选中的图元,编写了函数bool MouseAroundPoint(POINT *a_ptMoser, POINT *a_ptCenter),其余的都在WinProc()中增添,加剧了WinProc()的混乱度。耗时约3小时,完成编写与调

      7、试。移动和修改功能都已实现,实现效果还不错,但由于没有了虚线框,移动过程的可视化与交互性不够。B“工具栏”的开发,用一个dialog绘制工具栏,将其创为非模态对话窗。原想使用TAB Contrl,但由于从没用过,估计要花不少时间学习,而离交作业的最后期限很近了,就用了两个BUTTON代替TAB来切换“图层和图元”界面,编写了ToolBar.cpp文件,编写是特别注意了其可扩展性。“图元”界面用于选择图元操作,“图层”界面用于显示和修改当前选中的图元的参数信息,提供了修改图元的快捷方式。由于时间紧迫以及程序的结构已经混乱,代码尚未编写完成,“图层”功能搁置。C“剪切”、“复制”、“粘帖”的功能不难写,由于时间原因未编写。“撤销”功能,我目前还没想出好的策略,似乎只能开辟空间暂存操作记录和数据。“删除”功能是在绘制实验报告的那幅图时,发现没有“删除”很是不便,才临时增加的。由于MyDoc.cpp中相关函数已写好,故只增加了三行代码就完成了“删除”。三 总结回顾:总用时:约3050小时代码:2100+行完成程度:完成老师要求,完成自己要求的70%个人满意程度:7075%,基本满意老师满意程度:待定收获:1. 熟悉了指针的用法,编写的代码中满是指针,传来传去,指来指去的,幸运的是基本没出什么大麻烦。2. 深刻意识到OOP的重要性,如果说编写过程控制程序用C还可以的话,那么编写UI(用户界面)就非C+莫属了。不是说C不行,只是很容易混乱。遗憾:1. 未能完成全部功能。但即使完成了预期目标,也还会有这种能遗憾的,因为总会有新的功能要完善。善无止境,直到人累死,这样不好。2. 刚开始时还觉得自己的程序结构还不错,有C+的味道,但功能写得越多程序也越混乱了,尤其是昨晚11点多时人已经晕得有些想吐了,就赶紧休息去了。还是王彬说的那种结构好,窗体过程函数只负责向各个对象分发消息,而不是把所有的任务都揽在自己身上,使自己变得越来越臃肿混乱。3. 程序中还有不少BUG,如画或修改的图形多了,显示会混乱,但图形的数据结构没有被破坏,这时可以要赶紧保存,然后重新运行再打开文件读取,可保证编辑结构不丢失。呵呵4. 时间紧,预期功能太多,经验不足,写得累坏了,匆忙完工,连实验报告也不想排版了。好好休息。张良钿2007-6-3 18:00于 寝室

      《综合二简易图形编辑器报告》由会员jiups****uk12分享,可在线阅读,更多相关《综合二简易图形编辑器报告》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.