南昌航空大学科技学院学士学位论文
2.3.1绘图对象类设计
为了统一管理各种绘图对象,可以将要绘制的对象抽象成一个抽象基类DrawObject,其他的绘制对象则从DrawObject继承,在扩充类中,通过重写DrawObject类的属性和方法,即可实现针对特定的图形图像的绘制。
各绘图对象类之间的关系如图2.1所示。
在图2.1中,DrawObject是所要绘制对象的抽象基类,在该类中定义绘图对象的公共属性和方法。
图2.1绘制对象间的继承关系
类TrackRectangle,TrackText,TracCurve都是从DrawObject继承。TrackRectangle,TrackText,TracCurve这三个类分别表示矩形,文字,曲线的封装类,这三个类中均不实现绘制方法,而是由其派生类实现。TrackRectangle表示可以从规则矩形特征中抽取句柄的所有对象的基类,如矩形,椭圆,图像等。在这个列子中,DrawMyRectangle从TrackRectangle继承表示矩形,DrawMyImage从TrackRectangle继承表示绘制图像。如果需要绘制椭圆,只需要从TrackRectangle派生即可。
TrackCurve是所有以点作为句柄特征的所有曲线类的基类。曲线可以有带有箭头的曲线,不带箭头的曲线,封闭曲线以及其他特殊曲线等。DrawMyCurve从TrackCurve继承表示绘制的是带有箭头的曲线。
TrackText是所有文字绘制的基类,DrawMyText类从TrackText实现文字的绘制,如果需要其他效果的文字,一样可以从TrackText类派生。 2.3.2 工具类设计
当用户使用鼠标拖放绘制,选中和移动对象时,都会用到窗体或控件MouseMove,MouseDown,MouseUp事件。对于不同的对象,这些鼠标事件中的实现代码也不尽相同,为此需要提供一个实现图形图像鼠标控制基类ToolObject.当用户
11
南昌航空大学科技学院学士学位论文
通过鼠标移动图像,绘制矩形,绘制文本,绘制曲线,绘制直线的操作时,将这些类从ToolObject类派生,然后在扩充类中重写基类对应的方法即可。类ToolRectangle,ToolCurve,ToolText,ToolImage,ToolPointer分别表示绘制矩形,曲线,文字,图像和平移图形图像时对应的鼠标控制操作类,他们均从ToolObject派生。各类之间的关系如图2.2所示
图2.2工具类间的继承关系
2.3.3其他类设计
除了绘图对象类和工具类以外,系统中还包括公共类以及进行主机和附机通信的类。具体如下。
(1) ObjectID类提供为图形图像对象创建ID的方法。 (2) CC类提供系统公用的属性和方法定义。
(3) GraphicsList类保存绘制对象的列表,同时实现绘图对象的查找,删除,选择等功能。绘制对象列表由List类型的字段来进行维护。 (4) User类封装与服务器通信的客户端信息。
(5) MyClient类封装附机的相关信息,提供附机向主机发送信息以及从主机接收信息的相关处理方法。
(6) MyServer类封装主机的相关信息,提供主机向附机发送信息以及从附机接收信息的相关处理方法
(7) MyService类封装公用的数据处理方法,提供绘制和平移对象的方法
2.4主机与附机
在主机和附机的通信中,主机收到附机的发送的字符信息后,需要解析字符串的含义,并确定主机需要执行的操作。对于附机来说也是一样的道理,字符串分为命令部分和参数部分,命令部分和参数部分之间以及参数部分的各个参数之间均用逗号分隔。
12
南昌航空大学科技学院学士学位论文
第三章 系统详细设计
3.1初始模块
初始界面主要显示的就是一个初始化界面,它是整个系统的第一个模块,其相应的窗体界面见图3.1:
图3.1 多机联合绘图初始化界面
这是PreMainForm窗体,在多机联合绘图系统中,主机和附机都是通过发送一系列的命令后,再通过响应来实现操作的。 a. 附机发送给主机的命令:(1)通过发送Login命令,附机与主机建立连接后,进入操作界面。主机接受后,返回WelcomeLogin命令,并把当前的图像图像字节返回给附机。(2)通过发送Logout命令,附机退出制作。主机收到此命令后,清除附机对应的信息,结束与此附机对应的线程,同时把命令发送给其他附机。(3)通过GetID命令来获取图形图像的唯一的ID. b. 主机发给附机的命令:(1)通过ID命令,主机返回给图像图形的ID(2)通过Logout命令,主机退出制作 c. 主机IP的确立核心代码如下: IPAddress ip;
if (IPAddress.TryParse(textBoxServer.Text, out ip) == false)
{
toolStripLabel1.Text = \主机IP地址格式不正确,请重新输入!\
13
南昌航空大学科技学院学士学位论文
buttonOK.Enabled = true; return; } else {
toolStripLabel1.Text = \正在连接主机,请稍等??\ backgroundWorker1.RunWorkerAsync(); while (backgroundWorker1.IsBusy) {
if (backgroundWorker1.CancellationPending == false)
{
Application.DoEvents(); } } } }
3.2 绘图模块设计
此模块是整个系统的核心,实现主要的功能:矩形,曲线,直线,文字,图像的基本绘制,以及删除,打印,导出图像的基本功能。
图3.2多机联合绘图程序
其主要通过菜单来实现下跳到其他窗体,通过菜单实现链接不同窗体 其核心
代码如下;
14
南昌航空大学科技学院学士学位论文
public partial class MainForm : Form {
public MainForm() {
InitializeComponent();
this.SuspendLayout();
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); } else {
CC.me.SendToServer(\); } } 3.2.1矩形的绘制
(1)在解决方案管理器中,添加一个名为DrawObject.cs的类,表示所有图形图像的基类,代码定义如下;
public abstract class DrawObject {
private bool selected;
///
get { return selected; } set { selected = value; } }
protected Color penColor;
///
15