劉國陽
摘 ?要:在Tribon中建立船體分段模型后,可以導出符合國際標準的的XML格式三維數據文件。借助C#開發(fā)環(huán)境編寫程序,讀取XML文件并提取其中的數據,用OpenGL重繪三維模型以供展示;同時將之與造船計劃線表有機結合,使計劃更加可視化,直觀反映每個建造階段的負荷問題;而且由于程序是可互動的,可以實時對計劃進行更改,這種更改也會動態(tài)反映出來。
關鍵詞:.Net ? C# ?XML ?計劃編排 ?TRIBON ?OpenGL
船舶生產設計是一項十分復雜的設計項目?,F階段我國船舶行業(yè)設計計劃管理仍舊存在著較為嚴重的問題。紙面上編制的設計計劃不能很好地與實際中的船體結合起來,甚至有時會完全脫離,而且計劃普遍是靜態(tài)、固化的,一旦需要變動,調整工作會變得特別困難。這種“紙上談兵”的計劃編排方式導致計劃的實行現狀不盡理想。如何讓計劃更好地與實際結合,是目前亟需解決的一個問題。本例以TRIBON模型為基礎,以C#及OpenGL編程語言為實現手段,論述解決問題。
程序開發(fā)目標
1、TRIBON模型獲取
2、系統(tǒng)重繪
3、計劃編排規(guī)則及程序顯示
4、整合計劃與模型信息
程序設計思路
程序主體采用C#編寫完成,C#是微軟公司發(fā)布的一種面向對象的、運行于.NET Framework之上的高級程序設計語言。C#是一種安全的、穩(wěn)定的、簡單的、優(yōu)雅的,由C和C++衍生出來的面向對象的編程語言。它在繼承C和C++強大功能的同時去掉了一些它們的復雜特性。通過TRIBON中獲取的模型信息及船廠提供的線表計劃,在程序中完成模型數據的解析,存儲及重繪,并通過錄入在程序中的線表計劃,展現船舶船塢的建造流程。
程序各個組件之間的關系如下圖所示:
圖 1
XML、OpenGL和船體分段模型
1、船體模型數據獲取
需要實現在外部系統(tǒng)展現建造過程,首先需要獲取建造模型的信息,本次課題中,我們采用Tribon提供的模型信息,TRIBON軟件是由瑞典KCS(Kockums ComputerSystem AB)公司研發(fā)的1款輔助船舶設計和建造的計算機軟件集成系統(tǒng),集CAD/CAM/MIS于一體,在中國及世界造船業(yè)中有著廣泛的用戶,Tribon的模型存在多種導出方式,如3D Dxf導出,API接口抽取導出,Xml導出。
表1 ?各種導出方式分別有優(yōu)缺點
本次課題中,表現模型細節(jié)并非是主要目的,僅需表現簡易的船體輪廓,且因需要處理整船數據,要求盡量簡潔,對比以上方法并考慮到實際需求后,比較各種方式的優(yōu)劣性,最終采取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作為一種關聯(lián)數據庫管理系統(tǒng),使用的SQL語言是用于訪問數據庫的最常用標準化語言,語法簡易且符合通用規(guī)范。由于其體積小、速度快、總體擁有成本低,編程簡易與多種編程語言具有較好的兼容性,滿足本次處理所需的數據庫要求,可以方便的通過C#完成讀寫數據操作。endprint
圖5 ?數據結構
3、模型繪制
對于3維圖形繪制,現今較常用的方式是采用成熟的圖形處理引擎或圖形庫做處理,其中圖形處理引擎又分為開源或商用兩大類,本次課題中,我們處理的圖形問題存在數據量適中,處理方式單一的情況,分析后認為使用成熟的圖形庫即可滿足需求,如果采用處理引擎通常需要在運行機安裝相應的環(huán)境,降低了通用性,因此,本題中采用最為常用的OpenGL。
OpenGL,開放圖形庫(英語:Open Graphics Library,縮寫為OpenGL)是個定義了一個跨編程語言、跨平臺的應用程序接口(API)的規(guī)范,它提供了近120個繪制點、線點多邊形等3D圖形的命令,可以完成繪制物體、變換、光照處理、著色、反走樣、融合、霧化、位圖和圖像、紋理映射、動畫等基本操作,通過把這一系列基本操作進行組合,可以構造更復雜的3D物體和描繪豐富多彩、千變萬化的客觀世界。
在C#中通過調用OpenGL 動態(tài)鏈接庫文件:csgl.dll和csgl.native.dll實現OpenGL所提供的強大的圖形功能。 這2個文件可以從相關網站上免費獲取。csgl.dll中定義了4個名稱空間,幾乎所有的OpenGL函數、用戶庫函數、輔助庫函數和實用庫函數及常量??梢苑奖阄覀兛焖俚耐瓿上嚓P圖形的繪制。
圖6 ?csgl庫
程序將解析獲取的模型信息,在程序中實現簡單重繪,為在計劃編排模塊中展現模型做基礎,繪制中將數據轉換為方便繪制的三維點信息,并在在設置完善的背景中循環(huán)繪制板架。
主要使用的Csgl接口:
在使用OpenGl繪制時,我們需要定義世界坐標,物體坐標,設備坐標和眼坐標:
其中世界坐標系與我們定義的全船坐標系一致;
物體坐標應在當前展現的模型之上,在此我們定義為模型的幾何中心,由模型的坐標信息計算獲取;
眼坐標系可以簡單的理解為當前的觀察坐標,在本課題中我們通過修改眼坐標來完成模型的旋轉,而不是通過模型的物體坐標或世界坐標修改來實現此功能。
設備坐標:OpenGL 的重要功能之一就是將三維的世界坐標經過變換、投影等計算,最終算出它在顯示設備上對應的位置,這個位置就稱為設備坐標。
如圖7所示,為程序中對于模型觀察系的定義:
圖7 ?觀察點定義
繪制中通過GL.glBegin(GL.GL_POLYGON)的接口函數來繪制板架平面,其中GL.GL_POLYGON代表將傳入的點坐標按照順序繪制為一個封閉多變型。
如圖8所示,為程序中對于模型信息的繪制:
圖8 ?模型繪制方法
繪制實現效果如圖-9所示,為測試的304分段模型繪制效果:
圖9 ?繪制效果
線表計劃編排及展現
線表計劃及體現是本次課題的重點,主要體現時間、裝配、符合的關系。本程序主要體現的是單船的船塢建造線表,對主節(jié)點計劃及實物量的分解,做出勞動力和硬件的負荷平衡計劃。由計劃物量(包括經能力測算和負荷平衡后計算出的投鋼量、分段數量、管加工量、舾裝量等)/產值/成本分解表(分解到工區(qū)/職種、月度)、計劃工時分解表和勞動力計劃等組成。程序分為2步實現:
1、實現計劃的快速編排存儲
系統(tǒng)依據建造計劃定義搭載循序及時間定義,定義分段的建造及搭載時間,如圖-10,E02分段的建造及搭載時間分別為2014.9.10~9.25,2014.10.15~10.16。
在定義分段信息時處建造時間信息,還需綁定之前導入模型信息,分段的重量、分段的尺寸信息(長、寬、高)、建造場地等信息,可用于后期的負荷計算。
圖10 ?程序實現計劃編排
2、實現按動畫方式展現計劃實行狀態(tài)
完成計劃編排后,在展現界面,按照時間軸演示造船流程,并支持時間軸的拖動,使操作者快速了解對應時間內船舶建造情況及船廠負荷狀況。
圖11 ?運行效果
結論及展望
通過船塢搭載的前期模擬,可以更準確、直觀的得出在該階段人力及設備的符合情況,為計劃編排人員及時發(fā)現計劃中的不合理處及問題提供了幫助。避免在實際計劃中出現紕漏造成的計劃延誤及生產資源的浪費。可以幫助船廠減少因計劃編排失誤造成的損失及避免因工期延誤導致的額外開支。并且在前期,可以提供一份較為相識的參考數據用于給船廠用作重要節(jié)點的決策,在建造前亦可提供一個演示成果用于讓設計人員,建造人員,船東船檢了解當前項目建造流程,提高造船企業(yè)的預知反應能力,實現制造資源的快速合理使用,為知識密集型的、以智能技術為主導的造船模式提供輔助。
參考文獻:
[1] 明日科技,C#編程全能詞典,電子工業(yè)出版社,2010
[2] 扶松柏,深入體驗C#項目開發(fā),清華大學出版社,2011
[3] 于翔,在實戰(zhàn)中成長—Windows Forms 開發(fā)之路,電子工業(yè)出版社,2009
[4] 王小科,梁冰,呂雙Visual C#項目開發(fā)實例自學手冊.北京:人民郵電出版社,2007
(作者單位:江蘇科技大學)endprint