張 錦 飛
(上海臻元船舶科技有限公司,上海 200052)
在船舶結構設計中,根據肋骨型線圍長展開的外板展開圖是一份非常重要的圖紙。全船所有外板的規(guī)格、排列、在外板上布置的各種縱橫構件、各層甲板、開口位置、分段縫、冰區(qū)加強相關的各種界限線等都必須表示在外板展開圖上,以便計算外板重量重心和估算船體鋼板規(guī)格等,作為船舶建造中訂貨的主要依據。該圖信息量大、縱橫線條密集、繪制極其繁瑣,不僅費時費力工作量大,而且效率低易出錯。因此利用先進的計算機輔助設計(CAD)技術,編制外板自動展開程序既可以在船舶設計過程中提高繪圖準確性,又大大降低設繪人員的工作強度,具有較強的現(xiàn)實意義。
CAD技術可以提高船舶設計的效率和質量,已經成為國內造船行業(yè)的共識,很多設計單位和船廠已在較大范圍內應用了國際先進水平的三維造船軟件,具有代表性的軟件有 TRIBON M3、FORAN、NAPA、CADDS5、CATIA 、NUPAS-CADMATIC和滬東SPD等,經過多年的經驗積累和二次開發(fā),已經達到了很高的應用水平。但由于各種軟件針對性和側重點不同,以及客戶的使用習慣,數(shù)據轉換接口等問題,國內船廠在使用這些軟件時多數(shù)局限在生產設計階段,即根據已有的完整退審圖紙在這些軟件中進行復雜的三維建模,添加工藝信息,進而用于計算機輔助建造(CAE),提高建造質量、縮短周期、降低成本。而在船舶設計的前期階段,如概念設計、詳細設計等階段,上述這些三維設計軟件使用很少。這個階段主要由各船級社相關軟件負責性能計算、強度校核等,而繪制圖紙送審則多數(shù)仍然廣泛采用AutoCAD二維繪圖軟件。
AutoLISP是AutoCAD最有效的開發(fā)工具之一,利用AutoLISP開發(fā)的船體外板自動展開程序僅需利用肋骨型線和中橫剖面圖,不需要復雜的三維軟件建模,直接得到詳細設計階段可用于送審的外板展開圖,并完善肋骨型線圖。
經過對2010版本AutoCAD的ActiveX技術研究[1~4],結合目前船舶設計過程中繪制外板展開圖的實際情況和經驗,設計了程序的核心算法,應用 AutoLISP編制外板自動展開程序,以實現(xiàn)船舶所有廣義縱向構件的外板自動展開。所謂廣義縱向構件,泛指所有在外板展開圖上表示的縱向對象,既包括甲板、平臺、船底舷側縱骨、縱桁、艙壁、底邊艙和頂邊艙斜板等真實縱向構件,也包括縱向板縫線、分段縫、冰區(qū)加強等各種界限線。
繪制外板展開圖需要有兩個關鍵步驟:
1)在肋骨型線圖上確定待展開構件的指定位置。
2)獲得所選定肋骨型線的展開長度。獲得曲線展開長度后即可在外板展開圖上確定相應肋位的展開點,并連接成一條曲線,即為需要展開構件的外板展開線。
本程序的流程圖見圖1。
圖1 程序流程
從圖1可知,本程序主要有自由展開、按水線展開、按縱剖線展開和按邊艙展開4個功能。程序的主對話框界面見圖2。
圖2 主對話框界面
按待展開肋骨型線的整個曲線總長度展開。其原理是在肋骨型線圖上確定指定構件位置,并切除該位置以外的肋骨型線;從圖形數(shù)據庫中直接提取該剩余部分肋骨型線的曲線總長度;最后根據曲線展開長度繪制該構件的外板展開線。
該功能需要切除部分肋骨型線,這破壞了肋骨型線的完整性,不利于后續(xù)操作。因此自由展開在程序中將作為一個輔助功能,只處理特別復雜的構件展開線,如甲板邊線、舷墻頂線、球鼻艏等。
相當于用一個垂直于船體中縱剖面的平面去切整個船舶,該平面和船體外板的相貫線即為按水線展開的構件指定位置。該平面位置不同使其相貫線在中縱剖面上的投影是一根等高或不等高水線,即相當于等高或不等高的縱向構件。
按水線展開的輸入數(shù)據對話框見圖3。程序根據輸入數(shù)據計算出不同肋位處的水線高度作為指定位置,然后作水平輔助線。求出指定位置水線與每個肋位肋骨型線的一系列交點,進而獲得每根肋骨型線從起點到交點的曲線長度,繪制按水線展開的外板展開線。
等高水線適用于前后高度相等的水平舷側縱骨、平臺、舷側縱桁等構件的展開線;不等高水線適用于前后高度不相等縱骨、平臺、縱桁等構件以及不同高度水平構件之間的過渡構件和傾斜橫艙壁、斜凳等的展開線。根據船舶構件的實際布置情況,程序可以分別一次性繪制多根等高構件的展開線和一根不等高構件的展開線。
與按水線展開功能原理相似,按縱剖線展開是相當于用一個垂直于船體基平面的平面去切整個船舶,與船體外板的相貫線即為按縱剖線展開的構件指定位置。同樣,按縱剖線展開又可分為等寬和不等寬縱剖線展開兩種。具體的輸入數(shù)據對話框見圖4。程序在計算出的指定位置作垂直輔助線,即獲得與外板的交點和從起點到該交點的曲線長度。
等寬縱剖線適用于同時繪制多根等寬船底縱骨、縱桁的展開線;不等寬縱剖線適用于繪制一根不等寬縱骨、縱桁等構件的展開線以及不同寬度縱向構件之間過渡構件的展開線。
圖3 按水線展開數(shù)據輸入對話框
圖4 按縱剖線展開數(shù)據輸入對話框
繪制類似于散貨船的底邊艙和頂邊艙斜板與外板交線的展開線。與按水線和縱剖線展開原理類似,用一個底邊艙或頂邊艙斜板所在的平面去切船舶,其與外板的相貫線即為按底邊艙或頂邊艙展開的指定位置。
對于底邊艙,根據結構布置,底邊艙斜板一般坐落于底部縱桁上,并隨著縱桁的位置變化而變化。因此需要先找出縱桁的位置變化,然后按底邊艙斜板的角度繪制輔助線,找出其與外板的交點,即可得到按底邊艙展開的曲線長度。
對于頂邊艙,由于甲板存在梁拱,需要同時找出頂邊艙垂直板與斜板交點的距舯寬度和距基線高度的變化,然后用頂邊艙斜板的角度作輔助線,即可得到其與外板的交點和展開長度。具體的輸入數(shù)據對話框見圖5。
圖5 按邊艙展開數(shù)據輸入對話框
實現(xiàn)外板自動展開功能的關鍵步驟是在肋骨型線圖中自動確定構件位置,并計算出一系列肋骨型線的展開長度。程序編制過程中在這兩個關鍵點上遇到不少問題,對此提出如下方法。
程序中采用了AutoLISP擴展函數(shù)vlax-Get-Property來直接獲取所選擇對象的長度屬性,進而實現(xiàn)自由展開的功能。需要注意的是,調用該函數(shù)前必須利用vlax-ename->vla-object函數(shù)將所選擇的肋骨型線的圖形數(shù)據庫中的圖元名轉換為VLA對象名,然后才能用上述函數(shù)的length屬性提取多段線的總長度。
函數(shù)的應用格式:(vlax-get-property object property)
其中:object——VLA對象名;property——所要提取的屬性名稱,本程序中應用“l(fā)ength”屬性;本函數(shù)的返回值是對象屬性的值即為多段線的總長度。
程序中調用擴展函數(shù)vla-intersectwith直接獲得相應輔助直線與肋骨型線(多段線)的交點。返回值通過vlax-Variant-Value和vlax-safearray->list函數(shù)轉換為可處理的交點坐標。
需要特別指出的是,vla-intersectwith函數(shù)得到的最終結果是一個交點坐標的列表。如果獲得的交點不止一個,則該列表只是所有交點三維坐標的簡單一維數(shù)組羅列,離多段線起點近的交點坐標列在前面,離起點遠的交點坐標列在后面,如果多段線的首尾端點順序相反,則該列表的順序也將發(fā)生相應的變化。為方便程序的后續(xù)處理,需要將該一維列表按每個交點為單位的形式處理成兩維列表形式。這樣可以很方便地提取其中一個或多個交點,直接得到該交點的三維坐標。一般情況下,將肋骨型線與船體中心線的交點作為每根多段線的起點,根據船體構件的實際布置,選取靠近起點的交點作為構件在該肋位的展開點,而底邊艙斜板的外板展開則比較特殊,選取遠離起點的交點作為斜板在外板上的展開點。
函數(shù)的應用格式:(vla-IntersectWith object IntersectObject ExtendOption)
返回值:圖形數(shù)據庫中交點坐標所存貯的指針位置。通過轉換可得到需要的交點坐標。
在獲得構件與外板的交點后,利用 vlax-curve-getdistatpoint函數(shù)可獲取每一根肋骨型線上從起點到該交點的曲線長度。
函數(shù)的應用格式:(vlax-curve-getDistAtPoint curve-obj point)
返回值:從起點到指定交點的曲線長度,即在構件處的肋骨型線展開長度。
前期的數(shù)據準備主要體現(xiàn)在肋骨型線上。
1)在使用程序前,需要確保肋骨型線中沒有重合的型線。如有多余的肋骨型線,繪制展開線時就會錯位,得到錯誤的結果,所以請先檢查肋骨型線,刪除多余的型線;
2)需要確認肋骨型線是否是多段線(LwPolyline),如不是多段線,需要先轉化為多段線。在AutoCAD中,不同的線型有各自的數(shù)據存儲格式。由于程序將直接讀取多段線的數(shù)據庫資料,存儲格式決定了程序是否能獲取正確的數(shù)據。例如,以下是一個三點多段線的典型實體數(shù)據表,在AutoCAD中以聯(lián)結表形式存放:
((-1 .
表中的每一個子表都代表了一個實體的屬性。如上表中第二個子表的組碼“0”,表示該實體為“LwPolyline”線型。組碼為“10”的子表中分別代表了該多段線三個頂點的坐標值;
3)需要確認肋骨型線的起點是否靠近船體中心線與基線的交點,這將直接關系到所獲取的曲線長度是否正確。程序中具有自動識別所選擇多段線起點位置的功能,如果位置相反,將自動對調起點位置。但如果在低版本的AutoCAD上使用本程序,由于某些函數(shù)無法使用,則需要部分人工干預。
艏艉部是船體中型線變化最為劇烈的部分,這兩個區(qū)域的外板展開也相當復雜。艏部的球鼻艏和艉部的槳轂使同一肋位的型線分成上下兩個部分。艏艉的外板展開原理是一樣的,以艏部為例說明一下這部分如何展開。肋骨型線及外板展開示意圖見圖6。圖6中A點為球鼻艏最前點,B點為球鼻艏最后點。
圖6 肋骨型線及外板展開
1)球鼻艏展開:球鼻艏在型線中是一個獨立封閉的部分,在程序中可以選擇用自由展開功能來展開,如6圖中A點上面部分展開線;
2)球鼻艏區(qū)域構件展開:如圖6中5000~7000mm水線的展開,選擇按水線展開功能,輸入開始水線高5000mm,結束水線高7000mm,間距500mm,則在圖中一次性得到5根水平構件的展開線,同時在肋骨型線圖上自動繪制這些構件的布置位置,有利于完善肋骨型線圖;
3)球鼻艏以上部分構件的展開:這部分構件的展開較為復雜,其操作步驟為:①作為一般構件按水線或縱剖線展開;②確定B點位置,并單獨剖出該位置的肋骨型線;③計算出B點位置的展開長度;④將所有B點以上構件的展開線,以B點為基點,同時向上從投影位置移動到展開位置上。
由于本程序直接從AutoCAD數(shù)據庫讀取核心數(shù)據,所以構件的外板展開線在肋位點上與肋骨型線中相應肋位的曲線長度完全吻合。因此,本程序得到的外板展開線精度完全取決于肋骨型線的精度。船舶設計前期如果型線比較粗糙,外板展開精度也相應差一些,后期型線經過優(yōu)化及放樣光順,利用本程序重新展開一次,將得到相當精確的外板展開。對于艏艉部型線變化比較劇烈的區(qū)域,只要在該區(qū)域加密,多剖出一些肋骨型線,即可得到足夠精確的外板展開圖。
1)所選擇的肋骨型線數(shù)量必須≥2,否則程序將出現(xiàn)錯誤信息,要求用戶重新選擇肋骨型線;
2)用戶選擇肋骨型線時,應采用Fence的選擇模式,即在命令行鍵入“F”后選擇所需要的肋骨型線;
3)肋骨型線的選擇應按肋位號從小到大的順序選擇;
4)用戶盡量在船舶的舭部位置選擇肋骨型線,這個位置肋骨型線之間的差別相對較明顯,容易按肋位號的順序識別。如果在舷側位置選擇,則由于不同肋位型線相互重疊,容易導致肋位順序的識別錯誤,從而繪制錯誤的展開線;
5)用戶選擇肋骨型線時,需要盡量避免選擇到肋骨型線以外的實體,如文字、其他線型等;
6)選擇肋骨型線時,需要用戶預估一下待展開構件與所選擇型線的相對位置,若沒有交點,則無法得到該構件的外板展開線。
外板自動展開程序主要是用AutoLISP語言直接調用擴展函數(shù),利用ActiveX數(shù)據結構直接訪問圖形數(shù)據庫,通過將圖形對象和 VLA對象相互轉化,對特定對象的方法和屬性進行直接操作,這樣使得程序編寫明顯簡化,安全可靠,可以大大地擴充程序的功能。
本程序基本包括了外板展開圖中幾乎所有需要繪制的構件,常見的船型均可使用。展開同時同步得到構件在肋骨型線圖上的布置位置。實踐證明,在船舶設計前期利用外板自動展開程序進行設計和繪制船體肋骨型線圖和外板展開圖,既能大大提高設繪工作的效率、縮短設繪周期,又能極大的提高圖形繪制的精確度,保證了圖紙質量,達到了程序編制的預期要求。
[1] 張 輝. 利用VBA技術實現(xiàn)外板展開線的自動繪制[J]. 船舶設計通訊,2005, (1): 58-60.
[2] 孫家鵬. AutoCAD二次開發(fā)技術在繪制船體外板展開圖上的應用[J]. 上海造船,2006, (4): 16-19.
[3] 陳伯雄,馮 偉. Visual LISP程序設計——技巧與范例[M]. 北京:人民郵電出版社,2002.
[4] 劉銀遠. AutoLISP(10.0版)教程(初級、中級、高級)[M]. 北京:北京希望電腦公司.