《于基c#多机联合绘图软件的实现设计--毕业设计.doc》由会员分享,可在线阅读,更多相关《于基c#多机联合绘图软件的实现设计--毕业设计.doc(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、南昌航空大学科技学院学士学位论文 毕业设计(论文)题目: 基于C#多机联合绘图软件的实现 系 别 信息工程系专业名称 电子信息工程二O一三 年 五 月 学士学位论文原创性声明本人声明,所呈交的论文是本人在导师的指导下独立完成的研究成果。除了文中特别加以标注引用的内容外,本论文不包含法律意义上已属于他人的任何形式的研究成果,也不包含本人已用于其他学位申请的论文或成果。对本文的研究作出重要贡献的个人和集体,均已在文中以明确方式表明。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期:2013年5月 日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留
2、并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权南昌航空大学科技学院可以将本论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 作者签名: 日期:2013年5月 日导师签名: 日期:2013年5月 日基于C#多机联合绘图软件的实现摘要:随着计算机技术的发展和人们的需求,越来越多的人们选择计算机绘图软件,了解传统的绘图软件的起源、现状和发展趋势。再对现有的传统的绘图软件进行分析比较的基础上,提出了基于局域网的绘图软件的功能需求,多机联合绘图系统印证了这一需求,接下来讨论了基于局域网绘图软件的开发过程,着重分析了多机联
3、合制图通信技术,并给出了详细的实现方法。最后对本次绘图系统开发进行总结。随着计算机性能的提高和计算机视觉理论及技术的发展,这种技术必将日趋成熟。网络技术是计算机技术和通信技术相互渗透而又紧密结合的产物。计算机绘图技术作为计算机应用的一个重要方面。本次毕业设计的多机联合绘图系统分为类的设计和联机操作两大部分。其中类的设计主要是由绘图对象类设计和工具类设计,用Microsoft Visual Studio 2008开发工具软件编程来实现每一个部分,最后实现多机联合绘图软件,多台计算机联合制图。关键词:多机联合、图像处理、Microsoft Visual Studio 2008指导老师签名:Base
4、d on the c # implementation of multi-joint drawing softwareStudent name : Cai Xiang Class: 0982052Supervisor: Fang FangAbstract: With the development of computer technology and peoples needs, an increasing number of people choose computer drawing software, learn traditional origins, current situatio
5、n 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 process, focused
6、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 technology is th
7、e 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 parts. Where the
8、 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 Processing Mic
9、rosoft Visual Studio 2008Signature of Supervisor:目录前言1第一章 需求分析21.1 应用现状调查21.2 系统功能调查. .2 1.3系统目标. . .3第二章 概要设计32.1 系统分析42.2 Microsoft Visual Studio 2008开发工具简介42.3架构设计.42.3.1 绘图对象类设计. .42.3.2工具类设计. .52.3.3其他类设计.62.4主机和附机.6第三章 系统详细设计73.1 初始模块73.2 绘图模块设计83.2.1 矩形的绘制93.2.2 曲线的绘制143.2.3 直线的绘制173.2.4 文字的绘
10、制193.2.5 绘制任意大小的图像243.3 联机操作273.3.1 主机与附机的连接273.3.2 主机与附机联合绘图273.4其他功能的实现. .28 3.4.1编辑功能. .28 3.4.2导出图像. .29 3.4.3图像的打印和预览. .29第四章 系统调试324.1 系统调试及测试过程324.2 系统测试结果分析32第五章 结 论34参考文献35致 谢36附录37前言当今信息社会以多媒体为代表的信息技术产业的发展和应用对人类社会的影响和作用愈来愈明显,愈来愈强,也就是说,图形图像技术的飞速发展也是必然趋势,掌握图形图像处理技术对现代人来说也是很必要的。随着计算机技术的发展和人们的
11、需求,越来越多的人们选择计算机绘图软件,了解传统的绘图软件的起源、现状和发展趋势;在对现有的传统的绘图软件进行分析比较的基础上,提出了基于局域网的绘图软件的功能需求,接下来讨论了基于局域网绘图软件的开发过程,着重分析了多机联合制图通信技术,并给出了详细的实现方法。最后对本次绘图系统开发进行总结。随着计算机性能的提高和计算机视觉理论及技术的发展,这种技术必将日趋成熟。本次毕业设计的多机联合绘图系统分为类的设计和联机操作两大部分。其中类的设计主要是由绘图对象类设计和工具类设计,用Microsoft Visual Studio 2008开发工具软件编程来实现每一个部分,最后实现多机联合绘图软件,多台
12、计算机联合制图。第一章 需求分析1.1 应用现状调查目前,大多数绘图系统都是单体运行的,而多机联合绘图系统可实现多台计算机同时对图形图像进行处理分析,在对现有的传统的绘图软件进行分析比较的基础上,提出了基于局域网的绘图软件的功能需求,主要可用于网络布线,及网络通信,因此研究及开发这一种技术必将日趋成熟。1.2系统功能调查整个系统从总体上分为类的设计,联机操作两大部分,系统应实现的功能如下多机联合绘图系统类的设计联机操作绘图对象类的设计工具类的设计其他类的设计主机和附机的连接附机和主机的连接联机绘图图1.1系统功能模块图1.3系统目标利用Microsoft Visual Studio 2008通
13、过类的设计实现单机绘图,该系统实现矩形,曲线,直线,文字,图像的绘制,再通过联机操作,实现主机和附机的连接,最后实现多机联合绘图。第二章 概要设计2.1系统分析 本次设计的多机联合绘图系统是一个基于C#实现多台计算机间协作的操作系统。多台计算机在本地的局域网络或者固定IP的Internet上制作同一张图,制作时将计算机分为主机和附机。任何一台计算机都可以作为主机。将某台计算机作为主机后,连接到该机的其他同时制图的计算机便只能作为附机。 不论是主机还是附机,每个联合制作的计算机看到的设计界面都是一样的。任何一台计算机添加或修改一个图形时,其结果都会立即反映到其他计算机上。系统要求必须要有一台计算
14、机作为主机,并且只能有一个主机。只有当主机进入制作界面之后,其他附机才能进入制作界面。当主机退出制作界面之后,所有的附机将无法继续制作。多机联合绘图系统以几种具有代表性的图形图像的绘制方法为主,并不是实现所有图形图像的绘制。2.2 Microsoft Visual Studio 2008开发工具简介本次设计应用编程工具是Microsoft Visual Studio 2008,它是面向Windows Vista、Office 2007、Web 2.0的下一代开发工具,代号“Orcas”,是对Visual Studio 2005一次及时、全面的升级。VS2008引入了250多个新特性,整合了对象
15、、关系型数据、XML的访问方式,语言更加简洁。使用Visual Studio 2008可以高效开发Windows应用。设计器中可以实时反映变更,XAML中智能感知功能可以提高开发效率。同时Visual Studio 2008支持项目模板、调试器和部署程序。Visual Studio 2008可以高效开发Web应用,集成了AJAX 1.0,包含AJAX项目模板,它还可以高效开发Office应用和Mobile应用。2.3架构设计在多机联合绘图系统中,为了简化起见,只实现矩形,曲线,文字,直线和图像等基本图形图像的绘制。2.3.1绘图对象类设计 为了统一管理各种绘图对象,可以将要绘制的对象抽象成一个
16、抽象基类DrawObject,其他的绘制对象则从DrawObject继承,在扩充类中,通过重写DrawObject类的属性和方法,即可实现针对特定的图形图像的绘制。 各绘图对象类之间的关系如图2.1所示。 在图2.1中,DrawObject是所要绘制对象的抽象基类,在该类中定义绘图对象的公共属性和方法。图2.1绘制对象间的继承关系 类TrackRectangle,TrackText,TracCurve都是从DrawObject继承。TrackRectangle,TrackText,TracCurve这三个类分别表示矩形,文字,曲线的封装类,这三个类中均不实现绘制方法,而是由其派生类实现。Tra
17、ckRectangle表示可以从规则矩形特征中抽取句柄的所有对象的基类,如矩形,椭圆,图像等。在这个列子中,DrawMyRectangle从TrackRectangle继承表示矩形,DrawMyImage从TrackRectangle继承表示绘制图像。如果需要绘制椭圆,只需要从TrackRectangle派生即可。TrackCurve是所有以点作为句柄特征的所有曲线类的基类。曲线可以有带有箭头的曲线,不带箭头的曲线,封闭曲线以及其他特殊曲线等。DrawMyCurve从TrackCurve继承表示绘制的是带有箭头的曲线。TrackText是所有文字绘制的基类,DrawMyText类从TrackT
18、ext实现文字的绘制,如果需要其他效果的文字,一样可以从TrackText类派生。2.3.2 工具类设计当用户使用鼠标拖放绘制,选中和移动对象时,都会用到窗体或控件MouseMove,MouseDown,MouseUp事件。对于不同的对象,这些鼠标事件中的实现代码也不尽相同,为此需要提供一个实现图形图像鼠标控制基类ToolObject.当用户通过鼠标移动图像,绘制矩形,绘制文本,绘制曲线,绘制直线的操作时,将这些类从ToolObject类派生,然后在扩充类中重写基类对应的方法即可。类ToolRectangle,ToolCurve,ToolText,ToolImage,ToolPointer分别
19、表示绘制矩形,曲线,文字,图像和平移图形图像时对应的鼠标控制操作类,他们均从ToolObject派生。各类之间的关系如图2.2所示图2.2工具类间的继承关系2.3.3其他类设计 除了绘图对象类和工具类以外,系统中还包括公共类以及进行主机和附机通信的类。具体如下。(1) ObjectID类提供为图形图像对象创建ID的方法。(2) CC类提供系统公用的属性和方法定义。(3) GraphicsList类保存绘制对象的列表,同时实现绘图对象的查找,删除,选择等功能。绘制对象列表由List类型的字段来进行维护。(4) User类封装与服务器通信的客户端信息。 (5) MyClient类封装附机的相关信息
20、,提供附机向主机发送信息以及从主机接收信息的相关处理方法。(6) MyServer类封装主机的相关信息,提供主机向附机发送信息以及从附机接收信息的相关处理方法(7) MyService类封装公用的数据处理方法,提供绘制和平移对象的方法2.4主机与附机在主机和附机的通信中,主机收到附机的发送的字符信息后,需要解析字符串的含义,并确定主机需要执行的操作。对于附机来说也是一样的道理,字符串分为命令部分和参数部分,命令部分和参数部分之间以及参数部分的各个参数之间均用逗号分隔。第三章 系统详细设计3.1初始模块初始界面主要显示的就是一个初始化界面,它是整个系统的第一个模块,其相应的窗体界面见图3.1:图
21、3.1 多机联合绘图初始化界面这是PreMainForm窗体,在多机联合绘图系统中,主机和附机都是通过发送一系列的命令后,再通过响应来实现操作的。a. 附机发送给主机的命令:(1)通过发送Login命令,附机与主机建立连接后,进入操作界面。主机接受后,返回WelcomeLogin命令,并把当前的图像图像字节返回给附机。(2)通过发送Logout命令,附机退出制作。主机收到此命令后,清除附机对应的信息,结束与此附机对应的线程,同时把命令发送给其他附机。(3)通过GetID命令来获取图形图像的唯一的ID.b. 主机发给附机的命令:(1)通过ID命令,主机返回给图像图形的ID(2)通过Logout命
22、令,主机退出制作 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 (backgroundWorker1.IsBusy) if (background
23、Worker1.CancellationPending = false) Application.DoEvents(); 3.2 绘图模块设计此模块是整个系统的核心,实现主要的功能:矩形,曲线,直线,文字,图像的基本绘制,以及删除,打印,导出图像的基本功能。图3.2多机联合绘图程序 其主要通过菜单来实现下跳到其他窗体,通过菜单实现链接不同窗体 其核心代码如下; public partial class MainForm : Form public MainForm() InitializeComponent(); this.SuspendLayout(); CC.palette = new P
24、alette(); 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); else CC.me.SendToServer(Login); 3.
25、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 penColor; set penColor = value; protected
26、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 DrawMyRectangle : TrackRectangle public DrawMyRectangle()
27、 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.DrawRectangle(pen, objRectangle); pen.Dispose(); (
28、2)在解决方案管理器中,添加一个名为CC.cs的类,提供系统公共的属性和方法。CC类中提供了为图形图像对象分配ID的方法。具体代码请看附录的源代码;(3)分别添加名为ToolObject.cs和ToolRectangle.cs的类文件,其中,ToolObject表示封装鼠标事件的操作基类,ToolRectangle实现绘制矩形是的鼠标操作。ToolObject类的主要代码如下;class ToolObject protected bool isNewObjectAdded = false; public virtual void OnMouseDown(Palette palette, Mou
29、seEventArgs 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.ID); if (e.Button = MouseButtons.Left) DrawObject w = palett
30、e.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(Palette palette, DrawObject w) palette.graphics.UnselectAll(
31、); w.Selected = true; palette.graphics.Add(w); palette.Capture = true; palette.Refresh(); 让ToolRectangle类从ToolObject继承,并重写基类的OnMouseDown和OnMouseMove事件。主要代码如下;class ToolRectangle : ToolObject public ToolRectangle() public override void OnMouseDown(Palette palette, MouseEventArgs e) base.OnMouseDown(p
32、alette, 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) return; base.OnMouseUp(palette, e); if (CC.userState != UserStat
33、e.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.ObjRectangle.Y, w.ObjRectangle.Width, w.ObjRectangle.Height, w.PenColo
34、r.ToArgb(), CC.ID); palette.graphics.Remove(CC.ID); (4)在MultiDraw2.cs中定义一个ToolType枚举,表示绘制图形图像的类型;再定义一个ToolObject类型的activeTool对象,表示当前的活动对象;然后定义一个ToolObject类型的tools数组,表示所有鼠标操作类。主要代码如下;public enum ToolType Pointer, Rectangle, Text, Curve, Image, Line ; private ToolType activeTool;在主程序窗体MultiDraw2的构造函数中
35、,进行初始化操作。CC.panel=this.panell;tools(int)ToolType.Rectangle=newToolRectangle();(5)双击主程序窗体上的矩形按钮,在其Click事件中添加代码;activeTool=ToolType.Rectangle; (6)单击主窗体上的Panel控件,分别找到其MouseDown,MouseMove和MouseUp事件及Paint事件,在对应的事件中添加下面的代码;private void Palette_MouseDown(object sender, MouseEventArgs e) this.Capture = fals
36、e; 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, MouseEventArgs 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)