大型船舶积载图绘制方法的研究与实现

2012-07-13 06:29刘磊
电子设计工程 2012年23期
关键词:人民邮电出版社清华大学出版社窗体

刘磊

(连云港电子口岸信息发展有限公司 江苏 连云港 222042)

船舶积载图指的是标明货物在船上具体装载位置的示意图,船舶航次所承运的货物,在船上的堆装位置和堆装工艺的合理安排,对确保船舶安全,防止货损货差,充分利用船舶载货容积,提高装卸效率,提高船舶运输的经济效益具有重要的意义。通常在船舶积载计划确定后,即绘制出计划积载图,在图上标明船舶计划装载的各票货物的名称、装货单号、卸货港、包装形式、件数、吨数、货位等信息,由于船舶积载图的信息量很大,且频繁更新,人工绘制船舶积载图的方法已经不能适应大型船舶发展的需要。文中描述了如何应用GDI+实现终端用户快速绘制船舶积载图的方法。

1 设计思路

1)创建一个datagrid,展示所有进出港船舶航次列表,双击选中一条记录,即可对该船舶航次进行积载图的绘制[1];

2)创建一个实现船舶积载图模板的方法,选中船舶时调用该方法,首先绘制出一个基本的船舶积载图模型;

3)创建“选择”、“直线”、“矩形”、“标签”4 个按钮,其中“直线”、“矩形”、“标签”用来标识当前操作是要绘制直线、矩形和文本对象,“选择”用来标识当前是要选择已绘制的图形对象并对其进行修改操作[2];

4)创建一个datagrid,用来显示已选择船舶航次装载的货物,选中一条货物明细,绘制标签时自动带入货物品名、件重尺等信息;

5)屏幕绘制区域右键弹出功能菜单,“排列”实现已选择图形对象的图层设置,“分舱”实现对整艘船舶的舱位划分,“虚线、锁线”用来设置绘制图形对象时的线性,“保存”即对已绘制的积载图进行保存[3]。

6)直线、矩形、文本的绘制及已绘制图形对象的选择和修改:创建一个基础图形类,把用户要动态绘制的图形都抽象成类,并定义其属性和方法,用户绘制图形时实例化该类生成一个图形对象,保存绘制图形的属性;创建8个PictureBox,分别赋予不同的颜色,当用户选中已绘制的图形时,在图形的关键位置显示图片,用户可以拖动图片来移动或改变图形;创建一个动态数组,用来保存绘制的图形对象,在窗体的鼠标按下事件中判断当前是要绘制新图还是要修改图形,并记录当前鼠标的坐标[4],在窗体的鼠标移动事件中判断是目前是绘制新图形还是要选择已绘制的图形,如果是要修改图形,则根据移动鼠标的坐标遍历所有已绘制的图形,并判断是否有图形被选中,选中则在图片的关键位置显示图片,以便于改变图形属性;已选中图形或者绘制新图形,则先把新绘制或要修改的图形轨迹用窗体背景色画掉,再把所有窗体上的图形都重新绘制一遍,以防止上个命令会擦除掉其他图形的象素,然后再绘制最新的图形,在窗体的鼠标释放事件中对于新绘制的图形则实例化一个图形对象[5],用以保存新图形的属性,并把实例化的对象添加到动态数组中;对于修改的图形,则直接修改图形对象的属性,在PictureBox的鼠标按下、移动、释放事件中实现被选中图形的修改,逻辑依然是先用背景色画掉选中图形的轨迹,再把所有窗体上的图形都重新绘制一遍,以防止上个命令会擦除掉其他图形的象素[6],然后再绘制最新的图形。

7)图形对象的保存及加载:在菜单的保存按钮中实现绘制图形保存到数据库中,遍历动态数组存储的图形对象,把每个图形对象的关键属性存储到数据库表中,直线存储起点和端点的坐标,矩形存储起点坐标、长度和宽度,文本存储起点坐标、长度、宽度和文本内容[7],加载图形时读数据库表每条记录,根据图形对象的类型及存储的属性动态绘制图形对象,并保存到动态数组中[8]。

2 实现方法

1)创建datagrid,加载进出港船舶航次信息,选择进行一个航次的积载图绘制,主要代码片段如下:

2)针对已选择的船舶航次,加载已绘制的积载图或积载图模板,以直线为例主要代码如下:

3)绘制直线、矩形、文本均是在鼠标的 MouseDown和MouseUp事件中完成,代码片段:

4)对已绘制图形的选择及修改操作在鼠标的MouseMove事件中完成,代码片段如下:

5)分舱的功能实在textbox的keydown事件中完成,输入舱位数,根据船型自动分舱,代码片段如下:

3 结束语

通过演示程序,实现了在VISUAL BASIC.NET编程环境中如何应用GDI+使用户可以自定义的动态绘制船舶积载图,并且可以使用鼠标拖拽实现已绘制图形对象的移动、缩放等功能,同时把船舶航次的装货清单与实体积载图关联起来,应用鼠标就可以实现装载货物的快捷绘制,绘制的图形可以保存到数据库中,也可以加载已保存图形对象到窗体图形。作者已把本文的实现方法应用到连云港中理外轮理货信息管理系统中,得到了用户的一致好评。通过本文示例,希望能增进大家对文中涉及到的相关技术的了解,为以后编程实现中遇到类似的需求提供实践基础

[1]范文庆.Windows API开发详解[M].北京:人民邮电出版社.2011.

[2]Christian Nagel,bill Evjen,Jay Glynn等.C#高级编程[M].北京:清华大学出版社,2008.

[3]埃斯波西托.Microsoft.NET企业级应用架构设计[M].陈黎夫,译.北京:人民邮电出版社,2010.

[4]张红军,耿随心.Visual C++6.0编程详解[M].北京:科学出版社,2003.

[5]张海藩.软件工程导论[M].北京:清华大学出版社,2009.

[6]王小科.C#开发实战宝典[M].北京:清华大学出版社,2010.

[7]孙继磊,刘亮亮.精通Visual C#2008——语言基础、数据库系统开发、Web开发[M].北京:人民邮电出版社,2009.

[8]杨建昌.GDI+高级编程[M].北京:清华大学出版社,2009.

[9]王小科.C#开发实战宝典[M].北京:清华大学出版社,2010.

[10]王小科,梁冰,吕双.Visual C#项目开发实例自学手册[M].北京:人民邮电出版社,2008.

[11]赫姆瑞贾尼.Java敏捷开发:使用Spring,Hibernate和Eclipse[M].韩坤,徐琦,译.北京:人民邮电出版社,2007.

[12]Segaran T.Programming Collective Intelligence[M].O’Reilly,2009:1-145.

[13]Reeves W T.Particle systems——a technique for modeling a class offuzzy objects[J].Computer Graphics,1983,17(3):35-376.

[14]Luebke D,Reddy M,CohenJ D,et al.Level of Detail for 3D Graphics[M].USA:Morgan Kaufmann Publishers,2002.

猜你喜欢
人民邮电出版社清华大学出版社窗体
对某人而言,是为全部
清华大学出版社期刊中心
试谈Access 2007数据库在林业档案管理中的应用
Desperate Love towards the Dark Lady in Shakespeare’s Sonnets
《秘书工作手记》
《APP运营推广》
赵厚麟 :赞《通信世界》,常盛不衰;贺《通信世界》,惠及全球!
Translation and Dissemination of Critique of the Gotha Program in China in the Early Times〔* 〕
巧设WPS窗体控件让表格填写更规范
Impacts of GPS Synchronization Loss on TD-SCDMA Network Performance