由C#语言和OpenGL开发的Tribon模型重绘程序
刘国阳
摘 ?要:在Tribon中建立船体分段模型后,可以导出符合国际标准的的XML格式三维数据文件。借助C#开发环境编写程序,读取XML文件并提取其中的数据,用OpenGL重绘三维模型以供展示;同时将之与造船计划线表有机结合,使计划更加可视化,直观反映每个建造阶段的负荷问题;而且由于程序是可互动的,可以实时对计划进行更改,这种更改也会动态反映出来。
关键词:.Net ? C# ?XML ?计划编排 ?TRIBON ?OpenGL
船舶生产设计是一项十分复杂的设计项目。现阶段我国船舶行业设计计划管理仍旧存在着较为严重的问题。纸面上编制的设计计划不能很好地与实际中的船体结合起来,甚至有时会完全脱离,而且计划普遍是静态、固化的,一旦需要变动,调整工作会变得特别困难。这种“纸上谈兵”的计划编排方式导致计划的实行现状不尽理想。如何让计划更好地与实际结合,是目前亟需解决的一个问题。本例以TRIBON模型为基础,以C#及OpenGL编程语言为实现手段,论述解决问题。
程序开发目标
1、TRIBON模型获取
2、系统重绘
3、计划编排规则及程序显示
4、整合计划与模型信息
程序设计思路
程序主体采用C#编写完成,C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性。通过TRIBON中获取的模型信息及船厂提供的线表计划,在程序中完成模型数据的解析,存储及重绘,并通过录入在程序中的线表计划,展现船舶船坞的建造流程。
程序各个组件之间的关系如下图所示:
图 1
XML、OpenGL和船体分段模型
1、船体模型数据获取
需要实现在外部系统展现建造过程,首先需要获取建造模型的信息,本次课题中,我们采用Tribon提供的模型信息,TRIBON软件是由瑞典KCS(Kockums ComputerSystem AB)公司研发的1款辅助船舶设计和建造的计算机软件集成系统,集CAD/CAM/MIS于一体,在中国及世界造船业中有着广泛的用户,Tribon的模型存在多种导出方式,如3D Dxf导出,API接口抽取导出,Xml导出。
表1 ?各种导出方式分别有优缺点
本次课题中,表现模型细节并非是主要目的,仅需表现简易的船体轮廓,且因需要处理整船数据,要求尽量简洁,对比以上方法并考虑到实际需求后,比较各种方式的优劣性,最终采取Xml接口抽取所需的模型信息。XML(可扩展标记语言)是一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。
通过Tribon中的Basic Design导出对应的船体模型,如图2所示:
图 3 导出模型信息
操作工具条【XML】→【Export】→【Hull Steel Export】打开导出对话框。
选择需要导出的船体分段或板架,导出模型信息,并以.xml文件保存,便于后期的解析及保存。
2、 Xml文件的模型信息解析及存储
从TRIBON中导出的Xml文件中存在模型的分段信息,板架信息,板架轮廓,板架开孔等,通过解析数据获取需要的模型信息并依据数据结构保存数据方便之后的绘制及存储。
图4 ?Xml数据结构
如图4示例,是xml文件中对于单一板架的描述,我们将通过解析此文件结构获取对应板架信息。
如图3中板架的第一个点UV坐标为(U=64810,V= 9900),通过分析
在实际运用中,使用C#编程完成对于Xml中的数据读取,及相关处理,并按图-4结构编辑调准。为保证信息绘制方便,在读取信息完成后,通过程序完成上述方法2维点与3维点的转换。并按照分段->板架(包含坐标轴信息)->板架轮廓信息(包含轮廓点的坐标信息)结构存储点信息,存储介质采用最为流行的轻便数据库MySQL。MySQL作为一种关联数据库管理系统,使用的SQL语言是用于访问数据库的最常用标准化语言,语法简易且符合通用规范。由于其体积小、速度快、总体拥有成本低,编程简易与多种编程语言具有较好的兼容性,满足本次处理所需的数据库要求,可以方便的通过C#完成读写数据操作。
图5 ?数据结构
3、模型绘制
对于3维图形绘制,现今较常用的方式是采用成熟的图形处理引擎或图形库做处理,其中图形处理引擎又分为开源或商用两大类,本次课题中,我们处理的图形问题存在数据量适中,处理方式单一的情况,分析后认为使用成熟的图形库即可满足需求,如果采用处理引擎通常需要在运行机安装相应的环境,降低了通用性,因此,本题中采用最为常用的OpenGL。
OpenGL,开放图形库(英语:Open Graphics Library,缩写为OpenGL)是个定义了一个跨编程语言、跨平台的应用程序接口(API)的规范,它提供了近120个绘制点、线点多边形等3D图形的命令,可以完成绘制物体、变换、光照处理、着色、反走样、融合、雾化、位图和图像、纹理映射、动画等基本操作,通过把这一系列基本操作进行组合,可以构造更复杂的3D物体和描绘丰富多彩、千变万化的客观世界。
在C#中通过调用OpenGL 动态链接库文件:csgl.dll和csgl.native.dll实现OpenGL所提供的强大的图形功能。 这2个文件可以从相关网站上免费获取。csgl.dll中定义了4个名称空间,几乎所有的OpenGL函数、用户库函数、辅助库函数和实用库函数及常量。可以方便我们快速的完成相关图形的绘制。
图6 ?csgl库
程序将解析获取的模型信息,在程序中实现简单重绘,为在计划编排模块中展现模型做基础,绘制中将数据转换为方便绘制的三维点信息,并在在设置完善的背景中循环绘制板架。
主要使用的Csgl接口:
在使用OpenGl绘制时,我们需要定义世界坐标,物体坐标,设备坐标和眼坐标:
其中世界坐标系与我们定义的全船坐标系一致;
物体坐标应在当前展现的模型之上,在此我们定义为模型的几何中心,由模型的坐标信息计算获取;
眼坐标系可以简单的理解为当前的观察坐标,在本课题中我们通过修改眼坐标来完成模型的旋转,而不是通过模型的物体坐标或世界坐标修改来实现此功能。
设备坐标:OpenGL 的重要功能之一就是将三维的世界坐标经过变换、投影等计算,最终算出它在显示设备上对应的位置,这个位置就称为设备坐标。
如图7所示,为程序中对于模型观察系的定义:
图7 ?观察点定义
绘制中通过GL.glBegin(GL.GL_POLYGON)的接口函数来绘制板架平面,其中GL.GL_POLYGON代表将传入的点坐标按照顺序绘制为一个封闭多变型。
如图8所示,为程序中对于模型信息的绘制:
图8 ?模型绘制方法
绘制实现效果如图-9所示,为测试的304分段模型绘制效果:
图9 ?绘制效果
线表计划编排及展现
线表计划及体现是本次课题的重点,主要体现时间、装配、符合的关系。本程序主要体现的是单船的船坞建造线表,对主节点计划及实物量的分解,做出劳动力和硬件的负荷平衡计划。由计划物量(包括经能力测算和负荷平衡后计算出的投钢量、分段数量、管加工量、舾装量等)/产值/成本分解表(分解到工区/职种、月度)、计划工时分解表和劳动力计划等组成。程序分为2步实现:
1、实现计划的快速编排存储
系统依据建造计划定义搭载循序及时间定义,定义分段的建造及搭载时间,如图-10,E02分段的建造及搭载时间分别为2014.9.10~9.25,2014.10.15~10.16。
在定义分段信息时处建造时间信息,还需绑定之前导入模型信息,分段的重量、分段的尺寸信息(长、宽、高)、建造场地等信息,可用于后期的负荷计算。
图10 ?程序实现计划编排
2、实现按动画方式展现计划实行状态
完成计划编排后,在展现界面,按照时间轴演示造船流程,并支持时间轴的拖动,使操作者快速了解对应时间内船舶建造情况及船厂负荷状况。
图11 ?运行效果
结论及展望
通过船坞搭载的前期模拟,可以更准确、直观的得出在该阶段人力及设备的符合情况,为计划编排人员及时发现计划中的不合理处及问题提供了帮助。避免在实际计划中出现纰漏造成的计划延误及生产资源的浪费。可以帮助船厂减少因计划编排失误造成的损失及避免因工期延误导致的额外开支。并且在前期,可以提供一份较为相识的参考数据用于给船厂用作重要节点的决策,在建造前亦可提供一个演示成果用于让设计人员,建造人员,船东船检了解当前项目建造流程,提高造船企业的预知反应能力,实现制造资源的快速合理使用,为知识密集型的、以智能技术为主导的造船模式提供辅助。
参考文献:
[1] 明日科技,C#编程全能词典,电子工业出版社,2010
[2] 扶松柏,深入体验C#项目开发,清华大学出版社,2011
[3] 于翔,在实战中成长—Windows Forms 开发之路,电子工业出版社,2009
[4] 王小科,梁冰,吕双Visual C#项目开发实例自学手册.北京:人民邮电出版社,2007
(作者单位:江苏科技大学)