黃衛(wèi)剛,林科
中國艦船研究設(shè)計(jì)中心,湖北 武漢 430064
艦船總體設(shè)計(jì)目前正值二維設(shè)計(jì)和三維設(shè)計(jì)重疊的階段。其中,二維設(shè)計(jì)對象是甲板分層布置圖,圖中包含艙室邊界、艙室名稱等信息。根據(jù)這些信息可確定艙室之間的相鄰關(guān)系以及艙室面積容積等關(guān)鍵信息,對總體設(shè)計(jì)而言具有重要的影響[1],確定甲板分層圖中的信息將為艦船艙室容積面積統(tǒng)計(jì)以及不沉性等性能計(jì)算分析奠定基礎(chǔ)。基于二維圖紙自動構(gòu)建的艦船三維艙室布置模型將為三維設(shè)計(jì)提供基礎(chǔ)對象,是三維總體設(shè)計(jì)的基礎(chǔ)。如何實(shí)現(xiàn)二維圖紙向三維模型方向的轉(zhuǎn)換是目前工程中需要解決的一個問題。
現(xiàn)階段總體方案三維設(shè)計(jì)領(lǐng)域的主要研究方向集中在船舶設(shè)計(jì)的軟件化和智能化。例如:Kowalski 等[2]開發(fā)了基于船舶設(shè)計(jì)方法和程序的知識庫,輔助控制設(shè)備的船舶自動控制系統(tǒng);Kang 等[3]利用C 語言對三維設(shè)計(jì)軟件CADDSS進(jìn)行了二次開發(fā),研制了船舶管路自動布置設(shè)計(jì)的智能船舶CAD 系統(tǒng);李俊華等[4]應(yīng)用專家系統(tǒng)原理,開發(fā)了可進(jìn)行船舶艙室三維優(yōu)化的計(jì)算機(jī)系統(tǒng);蔡乾亞等[5]研究開發(fā)了集裝箱船穩(wěn)性計(jì)算及中橫剖面結(jié)構(gòu)設(shè)計(jì)的計(jì)算機(jī)系統(tǒng);Michalek 等[6]開發(fā)了一套人機(jī)交互建筑布置優(yōu)化軟件,允許用戶根據(jù)初始輸入數(shù)據(jù)生成可行方案,然后根據(jù)設(shè)計(jì)者個人意圖對可行方案進(jìn)行改造,如此反復(fù)后得出最優(yōu)布局結(jié)果;Michalek 等[7]首先將戶型優(yōu)化問題用網(wǎng)格進(jìn)行離散,變?yōu)檎麛?shù)規(guī)劃問題,采用人機(jī)交互的方法,結(jié)合整數(shù)規(guī)劃方法和專家系統(tǒng)在戶型優(yōu)化設(shè)計(jì)中的應(yīng)用,設(shè)計(jì)人員可動態(tài)地修改機(jī)器解后再進(jìn)行迭代;張濤等[8]應(yīng)用公理化設(shè)計(jì)原理及基于知識工程的模塊化機(jī)理有效探索了大型郵輪的布置設(shè)計(jì)規(guī)律。
由于設(shè)計(jì)歷史數(shù)據(jù)是二維圖紙,艦船設(shè)計(jì)人員仍習(xí)慣繪制二維圖紙。因此,面向三維設(shè)計(jì),需要基于二維圖紙轉(zhuǎn)化為三維設(shè)計(jì)的方案。機(jī)器學(xué)習(xí)等人工智能技術(shù)在總體設(shè)計(jì)中的應(yīng)用需要積累大量基礎(chǔ)數(shù)據(jù)集,目前這些數(shù)據(jù)集仍主要以二維圖紙的形式存在,如何實(shí)現(xiàn)二維布置圖智能識別及三維模型的自動構(gòu)建和數(shù)據(jù)化,是目前艦船智能設(shè)計(jì)亟待解決的一個問題。
本文針對上述問題,將提出一種基于總布置圖信息自動建模艙室三維模型的技術(shù),實(shí)現(xiàn)艙室信息的自動分析、建模等功能,為針對二維布置信息實(shí)現(xiàn)數(shù)據(jù)自動提取提供技術(shù)條件。
基于二維總布置信息的三維艙室自動建模技術(shù)的主要思路為:首先,采用數(shù)據(jù)分析技術(shù)提取AutoCAD 二維分層布置圖中的艙室邊界、名稱、編號等信息,建立二維艙室的圖元;然后,根據(jù)艙室的上、下二維圖元之間的對應(yīng)關(guān)系自動構(gòu)建艙室三維圖元;最后,形成針對三維軟件的數(shù)據(jù)接口,實(shí)現(xiàn)數(shù)據(jù)的有效輸出(圖1)。基于該技術(shù)開發(fā)了相應(yīng)的軟件,包括二維艙室邊界識別、二維艙室屬性識別、三維艙室建模和數(shù)據(jù)輸出等功能。

圖1 軟件基本流程Fig. 1 Basic sofware process
基于二維總布置信息的三維艙室自動建模是利用總布置圖中的艙室邊界、艙室名稱及艙室編號三類信息構(gòu)建三維艙室模型。開展工程設(shè)計(jì)時(shí),在總布置圖中通過不同圖層表示不同的信息,如艙室邊界、艙室名稱及艙室編號分別位于3 個不同的圖層。AutoCAD 二維分層布置圖一般包括多種圖層,艙室邊界只含艙室的輪廓線(包括舷側(cè)邊界信息)。為方便分析,艙室名稱、艙室編號需位于艙室輪廓范圍內(nèi)。考慮到項(xiàng)目的關(guān)注點(diǎn),首先需過濾總布置圖中包含的其他圖層(本研究的無關(guān)信息),然后識別并處理艙室邊界,對于需要識別的艙室邊界線較多(線型包括了直線、多段線、圓弧甚至樣條線),可以通過布爾運(yùn)算的方式實(shí)現(xiàn)。
具體步驟如下:
1) 基于Parisolid 的輸入接口導(dǎo)入AutoCAD格式的圖紙文件。建立一個1 000×1 000 的四邊形面域S,將所有艙室的邊界線向該面域進(jìn)行映射,容差定義為1×10-6。此時(shí),所有艙室邊界的延長線均變成了面域的邊界線,面域之間的邊界線將面域S打散成為數(shù)百個小碎面,如圖2 所示。

圖2 面域提取Fig. 2 Surface domain extraction
2) 提取面域所有碎面,去掉包含面域S邊界的碎面,每個碎面包含了各自的邊界線及內(nèi)部硬線(自由邊界)。
3) 解析碎面的邊界拓?fù)洹_吔缈勺R別為由一系列順序排列的散點(diǎn)形成的封閉域,起點(diǎn)坐標(biāo)等于終點(diǎn)坐標(biāo)。遍歷所有內(nèi)部點(diǎn)(除起點(diǎn)和終點(diǎn)外),若坐標(biāo)值相同,則該兩點(diǎn)間的所有點(diǎn)構(gòu)成了非邊界的內(nèi)部硬線。如圖3 所示,第n點(diǎn)和n+2點(diǎn)坐標(biāo)一致,則表明從n到n+2 形成了一條回歸的內(nèi)部硬線。

圖3 自由邊界處理Fig. 3 Free boundary processing
4) 若一條硬線上存在硬線分支,只需采用最小分支判斷即可。判斷i點(diǎn)和i+2 是否一致,若一致,i和i+1 就形成了一條單向的硬線。遍歷時(shí),找到所有分支的最頂部節(jié)點(diǎn)以及單向中間分支。
5) 基于干凈的(即面域內(nèi)無內(nèi)部硬線)外輪廓建立新的面域Sj,并反向延伸所有最頂部節(jié)點(diǎn),與所有單向中間分支一起映射到面域Si上,形成新的面域SI′。
6) 提取SI′的所有碎面,重新生成新的沒有碎面的面域SI″,再從SI″中繼續(xù)提取子面,此即為需要識別出的艙室邊界。
在處理識別艙室邊界的過程中,不可避免地會存在繪制不規(guī)范的問題。針對該問題,本文總結(jié)相關(guān)情況,給出了如表1 所示解決方案。

表1 艙室邊界繪制不規(guī)范問題處理表Table 1 The non-standard problems of tank boundary
確定了艙室邊界后,需要識別每一個艙室的屬性(包含艙室編號、艙室名稱)。AutoCAD 二維圖紙中,艙室編號及名稱通過艙室區(qū)域內(nèi)的文本形式顯示。考慮到本文研究目標(biāo)之一是實(shí)現(xiàn)二維布置狀態(tài)和三維設(shè)計(jì)方案之間的自動轉(zhuǎn)化,提出采用Parasolid 內(nèi)核tag 屬性(特有的)輔助關(guān)聯(lián)艙室及其對應(yīng)的屬性,tag 方式可實(shí)現(xiàn)屬性的快速匹配,經(jīng)幾千個面域的測試,可在1 s 內(nèi)完成屬性匹配。
為實(shí)現(xiàn)二維艙室屬性識別算法,本研究引入以下內(nèi)容:
1) 艙室流水號:將艙室從1 開始編號,順序?qū)崿F(xiàn)艙室的逐次處理,以便處理艙室。
2) 點(diǎn)流水號:描述與艙室流水號對應(yīng)的艙室編號所在位置,從1 開始排序。
具體算法如下:
1) 識別頂部和底部艙室區(qū)域?qū)傩浴a槍γ總€艙室申明1 個二維的tag 屬性,并賦予艙室流水號。面1 增加1 個tag 屬性1。同時(shí),組合所有識別出來的艙室形成面域S(無布爾運(yùn)算操作,僅簡單合并為一個幾何體)。針對艙室編號的位置創(chuàng)建散點(diǎn)對象,并將散點(diǎn)對象申明零維的tag 屬性,同時(shí)賦予點(diǎn)流水號。散點(diǎn)1 和2 分別賦予了零維tag 屬性1 和2。將所有的散點(diǎn)映射到組合面上,形成包含一系列硬點(diǎn)的面域S′。至此,散點(diǎn)1 和2 映射至面1 上(圖4)。布爾等操作下tag屬性除刻意覆蓋外,均具有屬性不變性。即經(jīng)過幾何布爾、切分等操作后,點(diǎn)、線、面、體的tag 屬性信息仍為初始幾何對應(yīng)維度的tag 信息。屬性不變性意味著可方便地追溯到Si’原始艙室和對應(yīng)的編號。圖4 映射后形成的新面包含6 個頂點(diǎn),其中1~4 邊界點(diǎn)屬于原始四邊形的頂點(diǎn),并未標(biāo)注任何零維信息,5 和6 點(diǎn)對應(yīng)原來的散點(diǎn)1 和2(即艙室編號和艙室名稱)。

圖4 艙室屬性識別Fig. 4 Cabin property identification
2) 提取S′的所有子面Si′,依次處理直到實(shí)現(xiàn)艙室名稱與艙室邊界逐一對應(yīng)。
3) 劃分艙室的子艙。對艙室的輪廓點(diǎn)進(jìn)行x向排序,并在每個中間站位增加一條硬線,將艙室打斷成子艙。如圖5 所示,圖中的多邊形艙室通過2 根硬線打斷成了3 個四邊形區(qū)域,這3 個區(qū)域就是3 個子艙。

圖5 艙室分割Fig. 5 Compartment segmentation
4) 對頂部、底部相同艙室編號的艙室進(jìn)行匹配處理。為了實(shí)現(xiàn)映射匹配,需要對子艙及其頂點(diǎn)進(jìn)行排序。子艙的創(chuàng)建是基于x方向分割實(shí)現(xiàn)的,x向分段編號依次為1,2,3,···,取子艙的形心位置y,取d=x+y/1 000。對所有子艙基于d值的大 小 進(jìn) 行 排 序(1 000 表 示 船 寬 不 超 過1 000 m,y/1 000<1)。如圖6 所示,實(shí)現(xiàn)了在xy平面上的排序。

圖6 艙室頂點(diǎn)xy 平面排序Fig. 6 Cabin vertex sorting on xy plane
對子艙頂點(diǎn)排序,判別式為d=x+y/1 000,四邊形子艙由點(diǎn)1,2,4 和3 組成,三角形子艙由點(diǎn)1~3 組成(圖7)。

圖7 艙室頂點(diǎn)的排序示意圖Fig. 7 Cabin vertex sorting
兩次排序后,就可以進(jìn)行頂部、底部子艙的映射判斷。圖8 中4 和3 代表相應(yīng)子艙的構(gòu)成是四邊形還是三角形。子艙信息采用多段線的方式描述子艙截面,圖中節(jié)點(diǎn)編號為空表示艙室編號缺失,一般為圖紙中存在的問題區(qū)域。

圖8 子拓?fù)涿鏅z查Fig. 8 Checking sub-topology
基于修正后的艙室數(shù)據(jù)和船體外形構(gòu)建三維艙室模型,便于后續(xù)的艙室修正及艙室肋骨型值的輸出,為不沉性計(jì)算等提供信息。三維艙室建模基于parasolid 內(nèi)核的自研程序完成。
基于parasolid 內(nèi)核的三維艙室建模輸入信息包括以下內(nèi)容。
1) 擴(kuò)大邊界的甲板信息,單層甲板信息格式如表2 所示。

表2 單層甲板信息及格式Table 2 Single deck information and format
2) 與甲板對應(yīng)的擴(kuò)大邊界的艙室信息。格式如下,艙室名稱、艙室上下面的二維邊線信息(上下表面均為四邊形,各邊均允許為樣條線,每一個括號內(nèi)為一條邊線的控制點(diǎn))。如表3 所示。

表3 擴(kuò)大邊界的艙室信息及格式Table 3 Cabin information and format of the expanded boundary
基于parasolid 內(nèi)核的三維艙室建模程序算法流程如下:
1) 基于艙室上、下面的二維信息及上、下甲板高度,構(gòu)建艙室的六面體實(shí)體模型(如圖9 中陰影實(shí)體);

圖9 三維艙室實(shí)體模型自動建模Fig. 9 Automatic physical modeling of 3D cabin
2) 計(jì)算六面體實(shí)體的包圍盒,搜索外形面與該包圍盒干涉的子面,與該六面體完成修剪操作,修剪點(diǎn)x的坐標(biāo)取船舯x,y坐標(biāo)為0,z坐標(biāo)為100。修剪后的實(shí)體即為艙室實(shí)體(圖10)。

圖10 三維艙室自動建模(橫剖圖)Fig. 10 Automatic modeling of 3D cabin (cross section)
通過網(wǎng)格填充相鄰截面的方式生成的船體外形,在球鼻艏處和艉軸孔處是不封閉的。當(dāng)艙室部分區(qū)域與這兩處存在交集時(shí),無法通過修剪操作獲得正確的艙室邊界,可先將中縱剖線雙向拉升成如圖11 所示的修剪面。利用該修剪面修剪一次六面體子艙,然后再利用船體外形進(jìn)行艙室修剪即可。

圖11 三維艙室自動建模(修減面)Fig. 11 Automatic modeling of 3D cabin (tailoring section)
利用網(wǎng)格面做船體外形進(jìn)行布爾運(yùn)算,每個截面大概有近200 個型值點(diǎn),而復(fù)雜船型又有數(shù)百個截面,因此參與布爾運(yùn)算的網(wǎng)格面可能達(dá)到四、五萬個。如布爾運(yùn)算模型不進(jìn)行優(yōu)化,生成一個艙室就需要數(shù)秒鐘,數(shù)千個艙室的生成往往需要較長時(shí)間,這種速度很難滿足工程需求。這里采用外形和艙室分級處理的布爾方式提升艙室實(shí)體的計(jì)算效率(圖12)。

圖12 分級布爾運(yùn)算Fig. 12 Hierarchical Boolean operation
若要利用現(xiàn)有的靜力性能計(jì)算軟件、不沉性計(jì)算軟件,則需輸入艙室外形。本研究恰恰可以提供艙室外形。鑒于上述軟件一般利用肋骨線描述艙室形狀,因此,基于二維總布置信息的三維艙室自動建模技術(shù)還需要實(shí)現(xiàn)三維艙室截面型值的輸出,可為其他計(jì)算軟件提供輸入(圖13)。修正完成的三維艙室,可以通過布爾運(yùn)算直接截出二維的子艙截面,并根據(jù)需要自行加密(圖14)。

圖13 三維艙室型值輸出Fig. 13 Output results of 3D compartment offset

圖14 多段線描述子艙截面輸出Fig. 14 Section output of multi-segment description sub-cabin
1) 基于三維艙室的數(shù)據(jù)輸出。
基于該系統(tǒng)實(shí)現(xiàn)了三維艙室的數(shù)據(jù)輸出,如圖15~圖16 所示。

圖15 三維艙室建模數(shù)據(jù)輸出Fig. 15 Data output of 3D cabin modeling

圖16 三維艙室局部圖Fig. 16 Local view of 3D cabin modeling
2) 艙室數(shù)據(jù)的查詢及數(shù)據(jù)管理。
艙室數(shù)目眾多,進(jìn)行屬性定義的工作量非常繁重,極易出錯,針對這個問題,提供了查詢和批量處理功能(圖17)。

圖17 艙室屬性處理Fig. 17 Treatment of cabin attributes
本文提出一種基于二維總布置圖信息的三維艙室自動建模技術(shù),實(shí)現(xiàn)布置信息的自動收集和分析功能,具有以下用途:
1) 適應(yīng)人工智能及智能設(shè)計(jì)的需求,方便實(shí)現(xiàn)大量總體方案的數(shù)據(jù)快速分析及建模,為采用智能算法進(jìn)行方案評估及優(yōu)化創(chuàng)造了一種新的技術(shù)途徑;
2) 適應(yīng)二維甲板分層布置圖和三維設(shè)計(jì)方案之間的數(shù)據(jù)自動交互功能,為三維艙室建模提供了快捷的數(shù)據(jù)轉(zhuǎn)化渠道;
3) 自動數(shù)據(jù)收集功能可為總體設(shè)計(jì)中的艙室容積分析、不沉性計(jì)算等提供預(yù)處理數(shù)據(jù),從而能夠有效提高計(jì)算及設(shè)計(jì)效率,并提升設(shè)計(jì)質(zhì)量。
依據(jù)本方法開發(fā)的軟件通過軟件測試驗(yàn)證了該技術(shù)的可行性和良好效果,可簡化相關(guān)總體設(shè)計(jì)工作的工作量,有效提高設(shè)計(jì)中相關(guān)工作的計(jì)算效率和設(shè)計(jì)效率,為總體方案的智能設(shè)計(jì)等提供樣本數(shù)據(jù)。