劉杰,楊梓輝,韓博志,李強(qiáng),陳新華
(1.武漢理工大學(xué) 能源與動力工程學(xué)院,武漢 430063;2.中船黃埔文沖船舶有限公司,廣州 510715)
工業(yè)產(chǎn)品設(shè)計已全面進(jìn)入數(shù)字化設(shè)計階段,CAD軟件應(yīng)用廣泛。為加快設(shè)計過程,關(guān)于CAD參數(shù)化繪圖系統(tǒng)或CAD輔助繪圖功能增強(qiáng)方面的工作[1],在船舶產(chǎn)品設(shè)計領(lǐng)域,針對船體[2-3]、聯(lián)軸器[4]等典型結(jié)構(gòu)及部件設(shè)計已有相應(yīng)文獻(xiàn)報道,也擴(kuò)展應(yīng)用到參數(shù)化的有限元分析模型構(gòu)建方面[5-6]。這些參數(shù)化繪圖系統(tǒng)基本都采用“特定對象繪圖特征分析→參數(shù)設(shè)計→定向程序開發(fā)→數(shù)據(jù)輸入與繪圖命令生成”這樣的邏輯處理流程。這一處理流程針對特定對象開發(fā)CAD參數(shù)化繪圖系統(tǒng)技術(shù)完全可行,但仍然存在如下不足之處。
1)采用這樣的處理流程需要對CAD二次開發(fā)的相關(guān)繪圖語句非常熟悉,針對不同的CAD軟件可能需要完全重新開發(fā)。
2)開發(fā)的系統(tǒng)只能針對單一對象,而對新對象,必須完整重復(fù)一次開發(fā)過程,程序開發(fā)中調(diào)試工作量大。
3)程序界面及功能模塊的開發(fā)工作量大,通用性、移植性和擴(kuò)展性不強(qiáng)。
4)開發(fā)周期長,用戶自身無法調(diào)整。
針對上述不足,考慮開發(fā)新的處理方法,利用平臺化軟件的思路,提高CAD參數(shù)繪圖系統(tǒng)開發(fā)的效率和靈活性。
CAD圖紙文件的生成可以通過兩種方式:①通過軟件的GUI界面進(jìn)行手工繪制;②通過編輯相應(yīng)的繪圖命令流,并在CAD中執(zhí)行命令流。為便于陳述,選取圖1所示的一份簡單圖形的CAD圖紙。圖2所示為該圖紙對應(yīng)的命令流。
圖1 示例圖紙
圖2 示例圖紙對應(yīng)的部分CAD繪制語句
改變圖2所示的命令流中的具體值,并重新執(zhí)行新的命令流,生成圖紙中對應(yīng)圖形的尺寸、位置即會改變,進(jìn)而生成一份新的圖紙,這也是目前所有的CAD參數(shù)化繪圖系統(tǒng)所采用的實現(xiàn)方式。但現(xiàn)有的CAD參數(shù)化繪圖系統(tǒng)其命令流輸出不僅包括其中的參數(shù)值,也包括對應(yīng)的繪圖語句,如Line、ARC等命令。這樣設(shè)計導(dǎo)致產(chǎn)生命令流的語句在程序邏輯中固化,通用性不強(qiáng),雖然程序?qū)崿F(xiàn)的難度不大,但需要對CAD軟件本身的命令語句比較熟悉。
為改變這種處理模式,構(gòu)建如圖3所示的處理方法。
圖3 系統(tǒng)設(shè)計流程
該方法中,首先通過已經(jīng)存在的圖紙文件構(gòu)建對應(yīng)對象的初始繪圖命令流,再編輯這個初始命令流形成對應(yīng)對象的參數(shù)化繪圖模板文件,在模板文件中特別設(shè)計標(biāo)記符號。程序運(yùn)行時,通過選擇特定的繪制對象加載相應(yīng)的模板,自動解析模板文件,獲取其中的標(biāo)記符號,根據(jù)獲取信息自動創(chuàng)建相應(yīng)的參數(shù)輸入界面。最后,在用戶輸入相應(yīng)的參數(shù)后,替換原來命令流模板文件中的標(biāo)記,形成一個新的完整命令流,并自動傳遞給CAD軟件執(zhí)行,得到需要的CAD圖紙文件。該處理方法有別于傳統(tǒng)處理方法的核心在于,完全不是由程序生成命令的語句,即程序并不直接輸出如Line、ARC等命令語句的,只是替換模板文件中的參數(shù)占位符,由此提高方法的通用性,也可以讓用戶自行創(chuàng)建和修改模板文件。
本方法的源頭是需要與參數(shù)化繪圖對象對應(yīng)的命令流模板。該命令流模板可以通過手工編輯產(chǎn)生,但需要對CAD命令語句及語法非常熟悉;同時還需要對繪制對象本身的特性很了解,比如軸系部件的繪制順序、繪制的細(xì)節(jié)等,無形中增加了開發(fā)的難度。為此,在構(gòu)建命令流模板文件時,采用一種新思路,即通過已有的CAD圖紙文件來產(chǎn)生初始的命令流文件。采用程序技術(shù)將CAD圖紙文件轉(zhuǎn)換為CAD命令流,簡化命令流模板文件的創(chuàng)建。圖2所示即為與圖1對應(yīng)圖紙根據(jù)該方法生成的命令流。
但圖2所示的命令流文本中,每個繪圖命令中仍然是一個具體的值,必須將具體的值變成參數(shù)的占位符號,才能變成命令流模板文件。此步驟非常關(guān)鍵,但人工逐一的修改很容易出錯。為方便構(gòu)建模板文件,需要有相應(yīng)的工具來簡化這個步驟。
觀察分析圖1可知:圖形之間一般存在較強(qiáng)的關(guān)聯(lián)性,例如:圖1正中3個圓有著相同的圓心,那么只需要定義一個參數(shù),簡化參數(shù)的數(shù)量。若不考慮圖形間的關(guān)聯(lián)性,參數(shù)個數(shù)會增加很多,導(dǎo)致輸入界面比較復(fù)雜,降低用戶的使用體驗。因此需要能在選擇某個參數(shù)值后,自動選擇所有該初始命令流文件中的相同參數(shù),并能全部或由用戶來決定是否替換為相應(yīng)的占位標(biāo)識符號。命令流模板文件輔助編輯界面見圖4。
圖4 命令流模板文件輔助編輯界面
在程序中定義一個字符串變量來存儲獲取到的命令流文本,將該命令流文本置于程序界面左側(cè)的文本框中,通過字符串切割函數(shù),將字符串變量中的所有參數(shù)值分割出來,存儲在一個數(shù)組中,去除數(shù)組中重復(fù)的參數(shù)。用列表控件來顯示該數(shù)組,置于程序界面的右側(cè)。用戶每次在列表控件中點擊某個參數(shù)時,程序會在原字符串變量中匹配該參數(shù),在左側(cè)文本框中使用高亮顏色來顯示,用戶即可編輯替換。編輯完成后,保存為命令流模板文件。通過該界面能加快命令流模板文件的創(chuàng)建。
分析命令流特征發(fā)現(xiàn),在命令流中,存在參數(shù)之間的依賴關(guān)系,即有些參數(shù)是可以通過其他參數(shù)值來計算確定的,這樣可以簡化參數(shù)的數(shù)量。圖1中標(biāo)記有“左下角小圓”與“中間最里層圓”為該圖紙的關(guān)鍵部分,標(biāo)記有“左直線”、“左上角圓弧”與“上直線”以及其他未標(biāo)記的部分為該圖紙的次要部分,若確定關(guān)鍵部分的參數(shù)信息,次要部分的參數(shù)信息即可由關(guān)鍵部分的參數(shù)信息計算得出。例如:左直線的長度可由左下角小圓的圓心坐標(biāo)y1與中間最里層圓的圓心坐標(biāo)y2計算得出;上直線的長度可由左下角小圓的圓心坐標(biāo)x1與中間最里層圓的圓心坐標(biāo)x2計算得出。
任意一份圖紙都會存在關(guān)鍵部分與次要部分,關(guān)鍵是如何確定。一種方法是通過對設(shè)計對象的理解,人工確定;另一種方法是通過讀取多份同類圖紙,分析其命令流,為每一份圖紙找出關(guān)鍵部分與次要部分。要實現(xiàn)通用化的CAD參數(shù)繪圖系統(tǒng),必須采用第2種方法。限于篇幅關(guān)系,這個問題不展開。
將關(guān)鍵部分的命令流參數(shù)稱為“直接參數(shù)”,次要部分的命令流參數(shù)稱為“間接參數(shù)”。“直接參數(shù)”設(shè)定為由用戶手動輸入,“間接參數(shù)”設(shè)定為程序通過由輸入的“直接參數(shù)”計算得出。因此,設(shè)計中采用將命令流模板文件中的“標(biāo)記符號”分為兩類:“直接參數(shù)”修改為含有“{和}”的標(biāo)記占位符,“間接參數(shù)”修改為含有“[和]”的標(biāo)記占位符。為了方便配置,將模板文件也分成“命令流模板”和“計算模板”兩類。圖1示例圖紙的部分命令流模板文件見圖5。
圖5 命令流模板文件
同時,為了能計算得出“間接參數(shù)”,還需在分析圖紙及其命令流的基礎(chǔ)上配置一份計算模板文件,在計算模板文件中給出參數(shù)間的計算關(guān)系。與圖5命令流模板文件配套的計算模板文件見圖6。
圖6 計算模板文件
程序運(yùn)行時,用戶在選擇完需要進(jìn)行參數(shù)化繪圖的模板文件后,程序會首先加載其中的命令流模板文件,再識別命令流模板文件中的“直接參數(shù)”占位符,構(gòu)建一個表格式的參數(shù)輸入界面,見圖7。
圖7 參數(shù)輸入界面
表格式輸入界面的好處是不需要考慮界面的布局;而且,在參數(shù)比較多的情況下,傳統(tǒng)的1個控件輸入1個值的界面設(shè)計方式很難實現(xiàn)通用化。
在所有的“直接參數(shù)”輸入完畢后,還需要進(jìn)行“間接參數(shù)”的計算,根據(jù)文獻(xiàn)[7]中的表達(dá)式解析思想,構(gòu)建表達(dá)式計算分析類。
在.net平臺利用VB.net2017語言進(jìn)行程序開發(fā)實現(xiàn),分為兩個主要功能:①通過案例CAD圖紙文件生成對應(yīng)的命令流文件,在此文件基礎(chǔ)上編輯形成命令流模板,編輯對應(yīng)的計算參數(shù)配置模板,并將這些信息保存到數(shù)據(jù)庫;②構(gòu)建用戶操作界面,提供用戶選擇需要繪制的對象圖紙類型,再根據(jù)選擇加載相應(yīng)的命令流模板文件,自動識別模板文件中的參數(shù),對應(yīng)創(chuàng)建參數(shù)輸入界面,再根據(jù)用戶輸入替換命令流模板,形成完整命令流后傳遞給CAD軟件執(zhí)行,得到最終的CAD圖紙。
程序的實現(xiàn)流程見圖8。
圖8 程序?qū)崿F(xiàn)流程
將該方法應(yīng)用在船舶軸系設(shè)計,產(chǎn)生的圖紙示例見圖9。
圖9 實現(xiàn)的效果示例
對比上下2個圖形,可以發(fā)現(xiàn)其中不僅是參數(shù)值的差異,也有圖元對象細(xì)節(jié)的差異。比如圖中下部的軸段中有過渡圓弧、有對稱軸線示意、有連接法蘭信息等,而上部的軸段則沒有這些細(xì)節(jié)信息。傳統(tǒng)的CAD參數(shù)化系統(tǒng)要實現(xiàn)這個差異,必須定義很多個系統(tǒng)配置參數(shù),根據(jù)系統(tǒng)配置參數(shù)的用戶取值來決定輸出圖元對象時的細(xì)節(jié)。這樣,系統(tǒng)實現(xiàn)的復(fù)雜度明顯增加,而且不可能包含所有的細(xì)節(jié)配置特征,導(dǎo)致很多情況下只有修改源程序才能實現(xiàn)功能的修改。但本文構(gòu)建的方法,其核心是命令流模板文件,針對同一個需要參數(shù)化繪制的對象,可以構(gòu)建不同的命令流模板。如圖9所示,其上下分別為2個命令流模板文件所生成的,在下部圖元所對應(yīng)的命令流模板中,包含了更多的細(xì)節(jié)繪制命令,因此輸出時就有更多的細(xì)節(jié)信息。因為命令流模板本質(zhì)上是普通的文本文件,修改很方便,可以由用戶來修改命令流模板文件,給予用戶一定的自主調(diào)整的可能,而不需要修改源程序。因此,本方法實現(xiàn)的是一種CAD參數(shù)化繪圖系統(tǒng)的開發(fā)平臺,借助該平臺中提供的命令流模板文件的配置設(shè)定工具,只需要開發(fā)配置更多的命令流模板文件,就可以實現(xiàn)對CAD參數(shù)化繪制對象的擴(kuò)展。
對現(xiàn)有CAD參數(shù)化繪圖系統(tǒng),提出新的實現(xiàn)方法,利用已有的案例圖紙產(chǎn)生繪圖命令流初始文件,再通過相應(yīng)的輔助工具創(chuàng)建形成命令流模板,模板文件中包括“直接參數(shù)”,和“間接參數(shù)”兩類占位符號。運(yùn)行時通過創(chuàng)建好的命令流模板文件自動創(chuàng)建出相應(yīng)的輸入界面,根據(jù)輸入?yún)?shù)進(jìn)行計算后替換原來命令流模板文件形成新的繪圖命令流,實現(xiàn)參數(shù)化繪圖的目的。解決了其中配置化表達(dá)式計算、模板文件輔助編輯等關(guān)鍵問題。該方法將傳統(tǒng)的CAD參數(shù)化繪圖系統(tǒng)提升到平臺化開發(fā)的高度,已在實際的軸系輔助設(shè)計軟件中得到集成應(yīng)用,效果良好。但在模板文件構(gòu)建的方便性方面,還有進(jìn)一步提升的空間。