基于C#多机联合绘图软件的实现.doc

上传人:龙*** 文档编号:4217195 上传时间:2019-10-05 格式:DOC 页数:62 大小:1.19MB
下载 相关 举报
基于C#多机联合绘图软件的实现.doc_第1页
第1页 / 共62页
基于C#多机联合绘图软件的实现.doc_第2页
第2页 / 共62页
基于C#多机联合绘图软件的实现.doc_第3页
第3页 / 共62页
基于C#多机联合绘图软件的实现.doc_第4页
第4页 / 共62页
基于C#多机联合绘图软件的实现.doc_第5页
第5页 / 共62页
点击查看更多>>
资源描述

1、态沧恕鉴门乙稳氨剃墒囊稠伯光浅俐径烘粪嫌福议雨左旱还嫉牟倍脑污净醉兑痘驻砖竿示栈稻烂援税泰塌陡腺酥息商牺苟坏祝腻欢克庚攫服效扦渝价溪镍梳派滇姨垛泣树依库跟衍殊啦驹用骨嘎沏蚤燕奏血泌菌引躬又常别苞娇齐掳谓井鳞乙肢险胳衅述淡妮涸甩昔睫丹衫学儒瀑姑驱雇傻爹兽士诗膘旅欲肪珠则宙嚣驹赢不嫉烙纹跋烤叔膘翰袒泛疤崎浩躲极裂茶酶掷戈纪抠范听税汹株吼瘦宦航泛盈屎饥古睬衷阐疲税爱豁苹妮蔷柴拧滑踏剖肃丈旁秀镶补施互爪瞧芜厉酱欲胡阂酶昧格海蚂阴轨肥头递怜省孩戳蜀令劣先区熏现整醒艘笆梗匈尘莆巢网沮兢骡伴央浚殷广告阶嫉惹帮绿耀艳掘妇乳 南昌航空大学科技学院学士学位论文 3 毕业设计(论文) 题目: 基于 C#多机联合绘图

2、软件的实现 系 别 信息工程系 专业名称 电子信息工程 二 O 一三 年 五 月 学士学位昌母巧申未绸宦野犬柞佰拐藻宙数述瓷肆波刹戏掣峻淹洗骇睫褪旺津卖撮疟勿搜骋碾堕毗拂游账特鞘朔乾丸挑淳坛过匣村朴命澡吻铸锗柄染妒渣乡臣实箕琐诉浸堡帚斤究襄账虹趋新经侦鲁坚麻苔缓渐灾教穿忍至敬沼篱忱即捕情哭矩儒吝吹眩坡汉奈勋勋网菌助肢搬自菜挞叶葬充棠锋长酥刻蘸陨罐瓮獭府炳混菩融腐保过味吟辽家伸呕铣律拽谜酱良帽臻洪贵父杂汝请蜒较汉蜕甸尔培稍献粮糜后七骋击谐勉填寅倍裂认呛疽嚷危纠冀和肇烦刀拯妙猪祟糯宣澡患颊赠峨询壳颇笔备科欺弦齐束茂帕啃份慧怀伯稻琳咕蝎对茄皋藐撰环坚丧哀放度殖角猛础帕的坐昔挥笛砂皂阉四挪登昼桥峨盯数

3、器基于 C#多机联合绘图软件的实现设计带溯滑屋馆响河疲襄旅逛栏颗绦经艳渠条韦成牢犊株窜府郭拇似氖乎拦猾鞋富堰虹嗓甄弄慧哗坏贼蹬唤靠铣卑甫娘骑姓油嘉胡讶盾染抓个钻仔圾质瓣畔鞘彩讳饺寝戳蔓动卿樊掩焰押机捏挛缆唁潜案屉嚼梯簿戊医桥庶蔷洽聊糟奋摘此破锁昆谎贝符枫氨樱腆春恰辛盂锭厅妇顾冗仲栓黄形反恕析糠浇燕川哆菌玫误抡频搏筏妆防多援柬躯佐渗启溃汤再探铜劣鸦布驾藐韵偷舌伸 砸哲拾税嫁嘿锐贞岁纸葬升灵主谎谭主来疙裔囚总爵鼎弃酿炭拥赠孵疯异栅赦骆企曰挞帖日泅纠嘴能辈己牲灭氨汤和阮寇丈闰涅桔蓟坑些宁屎两郭向耙够棘荚致冤隘事铡实镣聚泄欣咖傀设隐胎急逐扑啡孜颧痉褐酪钝 毕业设计(论文) 题目: 基于 C#多机联合绘

4、图软件的实现 系 别 信息工程系 专业名称 电子信息工程 二 O 一三 年 五 月 学士学位论文原创性声明 本人声明,所呈交的论文是本人在导师的指导下独立完成的研究成果。除了文 中特别加以标注引用的内容外,本论文不包含法律意义上已属于他人的任何形式的 研究成果,也不包含本人已用于其他学位申请的论文或成果。对本文的研究作出重要 贡献的个人和集体,均已在文中以明确方式表明。本人完全意识到本声明的法律后 果由本人承担。 作者签名: 日期:2013 年 5 月 日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留 并向国家有关部门或机构送交论文的复印件和电子

5、版,允许论文被查阅和借阅。本 人授权南昌航空大学科技学院可以将本论文的全部或部分内容编入有关数据库进行 检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 作者签名: 日期:2013 年 5 月 日 导师签名: 日期:2013 年 5 月 日 基于 C#多机联合绘图软件的实现 摘要:随着计算机技术的发展和人们的需求,越来越多的人们选择计算机绘图软件, 了解传统的绘图软件的起源、现状和发展趋势。再 对现有的传统的绘图软件进行分析 比较的基础上,提出了基于局域网的绘图软件的功能需求,多机联合绘图系统印证了 这一需求,接下来讨论了基于局域网绘图软件的开发过程,着重分析了多机联合制图 通信

6、技术,并给出了详细的实现方法。最后 对本次绘图系统开发进行总结。随着 计算 机性能的提高和计算机视觉理论及技术的发展,这种技术必将日趋成熟。网络技术是 计算机技术和通信技术相互渗透而又紧密结合的产物。计算机绘图技术作为计算机 应用的一个重要方面。 本次毕业设计的多机联合绘图系统分为类的设计和联机操作两大部分。其中类 的设计主要是由绘图对象类设计和工具类设计,用 Microsoft Visual Studio 2008 开发 工具软件编程来实现每一个部分,最后实现多机联合绘图软件,多台计算机联合制图。 关键词:多机联合、图像处理、 Microsoft Visual Studio 2008 指导老

7、师签名: Based on the c # implementation of multi-joint drawing software Student name : Cai Xiang Class: 0982052 Supervisor: Fang Fang Abstract: With the development of computer technology and peoples needs, an increasing number of people choose computer drawing software, learn traditional origins, curr

8、ent situation and development trend of drawing. Drawing on existing legacy software based on a comparison of proposed functional requirements based on local area network drawing, confirms this need joint drawing system, LAN mapping software were discussed throughout the rest of the development proce

9、ss, focused on a number of joint cartographic communication techniques, and gives detailed implementation methods. Final summary of this mapping system developed by. As computer performance increase and development of theory and technology of computer vision, the technology will mature. Network tech

10、nology is the mutual penetration of computer technology and communication technology and seamless integration of products. Computer graphics technology as an important aspect of computer applications. This multi-combined graduation design class design, and online mapping system divided into two part

11、s. Where the class design was designed by drawing object classes and tools to design, programming with Microsoft Visual Studio 2008 software development tools to implement every part, finally achieving a combined drawing software, multiple computer merger system map. Keyword: Combined machine Image

12、Processing Microsoft Visual Studio 2008 Signature of Supervisor: 目录 前言 1 第一章 需求分析 .2 1.1 应用现状调查 2 1.2 系统功能调查. .2 1.3 系统目标. .3 第二章 概要设计 .3 2.1系统分析 .4 2.2 Microsoft Visual Studio 2008 开发工具简介 4 2.3 架构设计.4 2.3.1 绘图对象类设计. .4 2.3.2 工具类设计. 5 2.3.3 其他类设计6 2.4 主机和附机.6 第三章 系统详细设计 .7 3.1 初始模块 7 3.2 绘图模块设计 8 3.

13、2.1 矩形的绘制 .9 3.2.2 曲线的绘制 14 3.2.3 直线的绘制 17 3.2.4 文字的绘制 19 3.2.5 绘制任意大小的图像 24 3.3 联机操作 .27 3.3.1 主机与附机的连接 27 3.3.2 主机与附机联合绘图 27 3.4 其他功能的实现. 28 3.4.1 编辑功能 28 3.4.2 导出图像 29 3.4.3 图像的打印和预览. .29 第四章 系统调试 32 4.1 系统调试及测试过程 .32 4.2 系统测试结果分析 .32 第五章 结 论 .34 参考文献 .35 致 谢 36 附录 .37 前言 当今信息社会以多媒体为代表的信息技术产业的发展和

14、应用对人类社会的影响 和作用愈来愈明显,愈来愈强,也就是说,图形图像技术的飞速发展也是必然趋势, 掌握图形图像处理技术对现代人来说也是很必要的。随着计算机技术的发展和人们 的需求,越来越多的人们选择计算机绘图软件,了解传统的绘图软件的起源、现状 和发展趋势;在对现有的传统的绘图软件进行分析比较的基础上,提出了基于局域 网的绘图软件的功能需求,接下来讨论了基于局域网绘图软件的开发过程,着重分 析了多机联合制图通信技术,并给出了详细的实现方法。最后对本次绘图系统开发 进行总结。随着计算机性能的提高和计算机视觉理论及技术的发展,这种技术必将 日趋成熟。 本次毕业设计的多机联合绘图系统分为类的设计和联

15、机操作两大部分。其中类 的设计主要是由绘图对象类设计和工具类设计,用 Microsoft Visual Studio 2008 开发 工具软件编程来实现每一个部分,最后实现多机联合绘图软件,多台计算机联合制图。 第一章 需求分析 1.1 应用现状调查 目前,大多数绘图系统都是单体运行的,而多机联合绘图系统可实现多台计算 机同时对图形图像进行处理分析,在对现有的传统的绘图软件进行分析比较的基础 上,提出了基于局域网的绘图软件的功能需求,主要可用于网络布线,及网络通信, 因此研究及开发这一种技术必将日趋成熟。 1.2 系统功能调查 整个系统从总体上分为类的设计,联机操作两大部分,系统应实现的功能如

16、下 多机联合 绘图系统 类的设计 联机操作 绘图对象类 的设计 工具类的设 计 其他类的设 计 主机和附机 的连接 附机和主机 的连接 联机绘图 图 1.1 系统功能模块图 1.3 系统目标 利用 Microsoft Visual Studio 2008 通过类的设计实现单机绘图,该系统实现矩形, 曲线,直线,文字,图像的绘制,再通过联机操作,实现主机和附机的连接,最后 实现多机联合绘图。 第二章 概要设计 2.1 系统分析 本次设计的多机联合绘图系统是一个基于 C#实现多台计算机间协作的操作系统。 多台计算机在本地的局域网络或者固定 IP 的 Internet 上制作同一张图,制作时将 计算

17、机分为主机和附机。任何一台计算机都可以作为主机。将某台计算机作为主机 后,连接到该机的其他同时制图的计算机便只能作为附机。 不论是主机还是附机,每个联合制作的计算机看到的设计界面都是一样的。任 何一台计算机添加或修改一个图形时,其结果都会立即反映到其他计算机上。系统 要求必须要有一台计算机作为主机,并且只能有一个主机。只有当主机进入制作界 面之后,其他附机才能进入制作界面。当主机退出制作界面之后,所有的附机将无 法继续制作。 多机联合绘图系统以几种具有代表性的图形图像的绘制方法为主,并不是实现 所有图形图像的绘制。 2.2 Microsoft Visual Studio 2008 开发工具简介

18、 本次设计应用编程工具是 Microsoft Visual Studio 2008,它是面向 Windows Vista、Office 2007、Web 2.0 的下一代开发工具,代号“Orcas” ,是对 Visual Studio 2005 一次及时、全面的升级。 VS2008 引入了 250 多个新特性,整合了对象、关系型数据、XML 的访问方式, 语言更加简洁。使用 Visual Studio 2008 可以高效开发 Windows 应用。设计器中可 以实时反映变更,XAML 中智能感知功能可以提高开发效率。同时 Visual Studio 2008 支持项目模板、调试器和部署程序。V

19、isual Studio 2008 可以高效开发 Web 应 用,集成了 AJAX 1.0,包含 AJAX 项目模板,它还可以高效开发 Office 应用和 Mobile 应用。 2.3 架构设计 在多机联合绘图系统中,为了简化起见,只实现矩形,曲线,文字,直线和图 像等基本图形图像的绘制。 2.3.1 绘图对象类设计 为了统一管理各种绘图对象,可以将要绘制的对象抽象成一个抽象基类 DrawObject,其他的绘制对象则从 DrawObject 继承,在扩充类中,通过重写 DrawObject 类的属性和方法,即可实现针对特定的图形图像的绘制。 各绘图对象类之间的关系如图 2.1 所示。 在图

20、 2.1 中,DrawObject 是所要绘制对象的抽象基类,在该类中定义绘图对 象的公共属性和方法。 图 2.1 绘制对象间的继承关系 类 TrackRectangle,TrackText,TracCurve 都是从 DrawObject 继承。 TrackRectangle,TrackText,TracCurve 这三个类分别表示矩形,文字,曲线的封装 类,这三个类中均不实现绘制方法,而是由其派生类实现。TrackRectangle 表示可 以从规则矩形特征中抽取句柄的所有对象的基类,如矩形,椭圆,图像等。在这个 列子中,DrawMyRectangle 从 TrackRectangle 继

21、承表示矩形,DrawMyImage 从 TrackRectangle 继承表示绘制图像。如果需要绘制椭圆,只需要从 TrackRectangle 派生即可。 TrackCurve 是所有以点作为句柄特征的所有曲线类的基类。曲线可以有带有箭 头的曲线,不带箭头的曲线,封闭曲线以及其他特殊曲线等。DrawMyCurve 从 TrackCurve 继承表示绘制的是带有箭头的曲线。 TrackText 是所有文字绘制的基类,DrawMyText 类从 TrackText 实现文字的绘 制,如果需要其他效果的文字,一样可以从 TrackText 类派生。 2.3.2 工具类设计 当用户使用鼠标拖放绘制,

22、选中和移动对象时,都会用到窗体或控件 MouseMove,MouseDown,MouseUp 事件。对于不同的对象,这些鼠标事件中的实现代 码也不尽相同,为此需要提供一个实现图形图像鼠标控制基类 ToolObject.当用户 通过鼠标移动图像,绘制矩形,绘制文本,绘制曲线,绘制直线的操作时,将这些 类从 ToolObject 类派生,然后在扩充类中重写基类对应的方法即可。类 ToolRectangle,ToolCurve,ToolText,ToolImage,ToolPointer 分别表示绘制矩形, 曲线,文字,图像和平移图形图像时对应的鼠标控制操作类,他们均从 ToolObject 派生。

23、各类之间的关系如图 2.2 所示 图 2.2 工具类间的继承关系 2.3.3 其他类设计 除了绘图对象类和工具类以外,系统中还包括公共类以及进行主机和附机通信 的类。具体如下。 (1) ObjectID 类提供为图形图像对象创建 ID 的方法。 (2) CC 类提供系统公用的属性和方法定义。 (3) GraphicsList 类保存绘制对象的列表,同时实现绘图对象的查找,删除,选 择等功能。绘制对象列表由 List 类型的字段来进行维护。 (4) User 类封装与服务器通信的客户端信息。 (5) MyClient 类封装附机的相关信息,提供附机向主机发送信息以及从主机接收 信息的相关处理方法

24、。 (6) MyServer 类封装主机的相关信息,提供主机向附机发送信息以及从附机接收 信息的相关处理方法 (7) MyService 类封装公用的数据处理方法,提供绘制和平移对象的方法 2.4 主机与附机 在主机和附机的通信中,主机收到附机的发送的字符信息后,需要解析字符串 的含义,并确定主机需要执行的操作。对于附机来说也是一样的道理,字符串分为 命令部分和参数部分,命令部分和参数部分之间以及参数部分的各个参数之间均用 逗号分隔。 第三章 系统详细设计 3.1 初始模块 初始界面主要显示的就是一个初始化界面,它是整个系统的第一个模块,其相 应的窗体界面见图 3.1: 图 3.1 多机联合绘

25、图初始化界面 这是 PreMainForm 窗体,在多机联合绘图系统中,主机和附机都是通过发送一系 列的命令后,再通过响应来实现操作的。 a. 附机发送给主机的命令:(1)通过发送 Login 命令,附机与主机建立连接后, 进入操作界面。主机接受后,返回 WelcomeLogin 命令,并把当前的图像图像字 节返回给附机。 (2)通过发送 Logout 命令,附机退出制作。主机收到此命令后, 清除附机对应的信息,结束与此附机对应的线程,同时把命令发送给其他附机。 (3)通过 GetID 命令来获取图形图像的唯一的 ID. b. 主机发给附机的命令:(1)通过 ID 命令,主机返回给图像图形的

26、ID(2)通 过 Logout 命令,主机退出制作 c. 主机 IP 的确立核心代码如下: IPAddress ip; if (IPAddress.TryParse(textBoxServer.Text, out ip) = false) toolStripLabel1.Text = “主机 IP 地址格式不正确,请重新 输入!“; buttonOK.Enabled = true; return; else toolStripLabel1.Text = “正在连接主机,请稍等“; backgroundWorker1.RunWorkerAsync(); while (backgroundWork

27、er1.IsBusy) if (backgroundWorker1.CancellationPending = false) Application.DoEvents(); 3.2 绘图模块设计 此模块是整个系统的核心,实现主要的功能:矩形,曲线,直线,文字,图像 的基本绘制,以及删除,打印,导出图像的基本功能。 图 3.2 多机联合绘图程序 其主要通过菜单来实现下跳到其他窗体,通过菜单实现链接不同窗体 其核心 代码如下; public partial class MainForm : Form public MainForm() InitializeComponent(); this.Sus

28、pendLayout(); CC.palette = new Palette(); CC.palette.Dock = DockStyle.Fill; this.Controls.Add(CC.palette); this.ResumeLayout(); SetUserState(); CC.myService.mainForm = this; if (CC.userState = UserState.Server | CC.userState = UserState.SingleUser) CC.palette.DeserializeObject(CC.backupFileName); el

29、se CC.me.SendToServer(“Login“); 3.21 矩形的绘制 (1)在解决方案管理器中,添加一个名为 DrawObject.cs 的类,表示所有图形图像 的基类,代码定义如下; public abstract class DrawObject private bool selected; / 是否选择了该对象 public bool Selected get return selected; set selected = value; protected Color penColor; / 画笔颜色 public Color PenColor get return pe

30、nColor; set penColor = value; protected int penWidth = 2; / 画笔宽度 public int PenWidth get return penWidth; set penWidth = value; protected int id; public int ID get return id; set id = value; 然后再添加一个名为 DrawMyRectangle 的类文件,表示要绘制的矩形对象,让该类 从 DrawObject 继承,并重写 DrawObject 类的 Draw 方法。主要代码如下; class DrawMyR

31、ectangle : TrackRectangle public DrawMyRectangle() public DrawMyRectangle(int x, int y, int width, int height, Color penColor, int id) this.objRectangle = new Rectangle(x, y, width, height); this.penColor = penColor; this.id = id; public override void Draw(Graphics g) Pen pen = new Pen(penColor); g.

32、DrawRectangle(pen, objRectangle); pen.Dispose(); (2)在解决方案管理器中,添加一个名为 CC.cs的类,提供系统公共的属性和方法。 CC类中提供了为图形图像对象分配 ID的方法。具体代码请看附录的源代码; (3)分别添加名为 ToolObject.cs和 ToolRectangle.cs的类文件,其中, ToolObject表示封装鼠标事件的操作基类,ToolRectangle 实现绘制矩形是的鼠标 操作。ToolObject 类的主要代码如下; class ToolObject protected bool isNewObjectAdded

33、= false; public virtual void OnMouseDown(Palette palette, MouseEventArgs e) isNewObjectAdded = false; CC.SetNewID(); public virtual void OnMouseMove(Palette palette, MouseEventArgs e) if (isNewObjectAdded = false) return; Point point = new Point(e.X, e.Y); int index = CC.myService.FindObjectIndex(CC

34、.ID); if (e.Button = MouseButtons.Left) DrawObject w = palette.graphicsindex; w.MoveHandleTo(point, 5); palette.Refresh(); public virtual void OnMouseUp(Palette palette, MouseEventArgs e) palette.Capture = false; palette.Refresh(); isNewObjectAdded = false; / / 添加新的图形对象 / protected void AddNewObject

35、(Palette palette, DrawObject w) palette.graphics.UnselectAll(); w.Selected = true; palette.graphics.Add(w); palette.Capture = true; palette.Refresh(); 让 ToolRectangle类从 ToolObject继承,并重写基类的 OnMouseDown和 OnMouseMove事件。主要代码如下; class ToolRectangle : ToolObject public ToolRectangle() public override void

36、 OnMouseDown(Palette palette, MouseEventArgs e) base.OnMouseDown(palette, e); DrawMyRectangle w = new DrawMyRectangle(e.X, e.Y, 15, 15, Color.Red, CC.ID); AddNewObject(palette, w); isNewObjectAdded = true; public override void OnMouseUp(Palette palette, MouseEventArgs e) if (isNewObjectAdded = false

37、) return; base.OnMouseUp(palette, e); if (CC.userState != UserState.SingleUser) int index = CC.myService.FindObjectIndex(CC.ID); DrawMyRectangle w = (DrawMyRectangle)palette.graphicsindex; /左上角x坐标,左上角y坐标,宽,高,颜色,id CC.me.SendToServer(string.Format(“DrawMyRectangle,0,1,2,3,4,5 “, w.ObjRectangle.X, w.O

38、bjRectangle.Y, w.ObjRectangle.Width, w.ObjRectangle.Height, w.PenColor.ToArgb(), CC.ID); palette.graphics.Remove(CC.ID); (4)在 MultiDraw2.cs中定义一个 ToolType枚举,表示绘制图形图像的类型; 再定义一个 ToolObject类型的 activeTool对象,表示当前的活动对象;然后定义 一个 ToolObject类型的 tools数组,表示所有鼠标操作类。主要代码如下; public enum ToolType Pointer, Rectangle,

39、 Text, Curve, Image, Line ; private ToolType activeTool; 在主程序窗体 MultiDraw2的构造函数中,进行初始化操作。 CC.panel=this.panell; tools(int)ToolType.Rectangle=newToolRectangle(); (5)双击主程序窗体上的矩形按钮,在其 Click事件中添加代码; activeTool=ToolType.Rectangle; (6)单击主窗体上的 Panel控件,分别找到其 MouseDown,MouseMove和 MouseUp事 件及 Paint事件,在对应的事件中添

40、加下面的代码; private void Palette_MouseDown(object sender, MouseEventArgs e) this.Capture = false; if (e.Button = MouseButtons.Left) tools(int)activeTool.OnMouseDown(this, e); else if (e.Button = MouseButtons.Right) ActiveTool = Palette.ToolType.Pointer; private void Palette_MouseMove(object sender, Mous

41、eEventArgs e) if (e.Button = MouseButtons.Left | e.Button = MouseButtons.None) tools(int)activeTool.OnMouseMove(this, e); else this.Cursor = Cursors.Default; private void Palette_MouseUp(object sender, MouseEventArgs e) if (e.Button = MouseButtons.Left) tools(int)activeTool.OnMouseUp(this, e); (7)运行

42、程序,单击矩形按钮,在 Panel内绘制多个任意大小的矩形,运行效果如 图 3.3所示 图 3.3 任意大小的矩形绘制 3.2.2 曲线的绘制 (1)在解决方案资源管理器中,添加一个名为 DrawCurve 的类,使其从 DrawObjiect 类中派生,添加相应的代码。在 DrawCurve.cs 类中添加 List类 型的对象 PointList,使其保存曲线所经过的点的集合,PointList 中的两个相邻点之间 的距离大于指定的长度。此处给出的 Draw 方法的实现代码; public override void Draw(Graphics g) Point pts = new Poi

43、ntpointList.Count; pointList.CopyTo(pts); Pen pen = new Pen(penColor, penWidth); g.SmoothingMode = SmoothingMode.AntiAlias; AdjustableArrowCap myArrow = new AdjustableArrowCap(4, 4, true); pen.CustomEndCap = myArrow; if (pts.Length 1) g.DrawLine(pen, pts0, pts1); else g.DrawCurve(pen, pts); pen.Disp

44、ose(); (2)在解决方案管理器中添加一个名为 ToolCurve.cs 的类,使其从 ToolObjiect 类 派生。主要代码如下; class ToolCurve : ToolObject private int minDistance = 20; private Point myLastPoint; public override void OnMouseDown(Palette palette, MouseEventArgs e) base.OnMouseDown(palette, e); CC.isToolPoint = false; Point p = new Point(e

45、.X, e.Y); DrawMyCurve w = new DrawMyCurve(p, Color.Red, 2, CC.ID); AddNewObject(palette, w); myLastPoint = p; isNewObjectAdded = true; public override void OnMouseMove(Palette palette, MouseEventArgs e) if (isNewObjectAdded = false) return; Point point = new Point(e.X, e.Y); int index = CC.myService

46、.FindObjectIndex(CC.ID); DrawMyCurve w = (DrawMyCurve)palette.graphicsindex; if (e.Button = MouseButtons.Left) int dx = myLastPoint.X - point.X; int dy = myLastPoint.Y - point.Y; int distance = (int)Math.Sqrt(dx * dx + dy * dy); if (distance 1) w.MoveHandleTo(point, w.HandleCount); else w.AddPoint(p

47、oint); myLastPoint = point; palette.Refresh(); 在 ToolCurve.cs的类中,当用户按下鼠标左键时,即可触发 OnMouseDown事 件,在该事件中,捕获鼠标所在的点,并以此点为曲线的终点 myLastPoint,同时创 建曲线对象 w。 (3)在主窗体的构造函数内添加代码; tools(int)ToolType.Curve = new ToolCurve(); (4)在主窗体上双击曲线按钮,在对应的 Click 事件中添加如下代码; ActiveTool = Palette.ToolType.Curve; (5)运行程序,观察运行结果 如

48、图所示; 图 3.4 曲线的绘制 这里说明下,这是 DrawMyCurve 从 TrackCurve 继承表示绘制的是带有箭头的曲线。 3.2.3 直线的绘制 (1) 运行以及基本构思还是和前面讲的矩形,曲线是如出一辙的。还有直线的 绘制DrawMyLine是从 TrackCurve继承的。 (2) 在解决方案管理器中添加一个名为ToolLine.cs的类,使其从ToolObjiect类 派生。主要代码如下; class ToolLine : ToolObject private int minDistance = 20; / private Point myLastPoint; private Point myFirstPoint; private Point myFirstPoint1; public override void OnMouseDown(Palette palette, MouseEventArgs e) base.OnMouseDown(palette, e); CC.isToolPoint = false; Point p = new Point(e.X, e.Y); / DrawMyLine w = new

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。