劉杰,楊梓輝,韓博志,李強,陳新華
(1.武漢理工大學 能源與動力工程學院,武漢 430063;2.中船黃埔文沖船舶有限公司,廣州 510715)
工業產品設計已全面進入數字化設計階段,CAD軟件應用廣泛。為加快設計過程,關于CAD參數化繪圖系統或CAD輔助繪圖功能增強方面的工作[1],在船舶產品設計領域,針對船體[2-3]、聯軸器[4]等典型結構及部件設計已有相應文獻報道,也擴展應用到參數化的有限元分析模型構建方面[5-6]。這些參數化繪圖系統基本都采用“特定對象繪圖特征分析→參數設計→定向程序開發→數據輸入與繪圖命令生成”這樣的邏輯處理流程。這一處理流程針對特定對象開發CAD參數化繪圖系統技術完全可行,但仍然存在如下不足之處。
1)采用這樣的處理流程需要對CAD二次開發的相關繪圖語句非常熟悉,針對不同的CAD軟件可能需要完全重新開發。
2)開發的系統只能針對單一對象,而對新對象,必須完整重復一次開發過程,程序開發中調試工作量大。
3)程序界面及功能模塊的開發工作量大,通用性、移植性和擴展性不強。
4)開發周期長,用戶自身無法調整。
針對上述不足,考慮開發新的處理方法,利用平臺化軟件的思路,提高CAD參數繪圖系統開發的效率和靈活性。
CAD圖紙文件的生成可以通過兩種方式:①通過軟件的GUI界面進行手工繪制;②通過編輯相應的繪圖命令流,并在CAD中執行命令流。為便于陳述,選取圖1所示的一份簡單圖形的CAD圖紙。圖2所示為該圖紙對應的命令流。

圖1 示例圖紙

圖2 示例圖紙對應的部分CAD繪制語句
改變圖2所示的命令流中的具體值,并重新執行新的命令流,生成圖紙中對應圖形的尺寸、位置即會改變,進而生成一份新的圖紙,這也是目前所有的CAD參數化繪圖系統所采用的實現方式。但現有的CAD參數化繪圖系統其命令流輸出不僅包括其中的參數值,也包括對應的繪圖語句,如Line、ARC等命令。這樣設計導致產生命令流的語句在程序邏輯中固化,通用性不強,雖然程序實現的難度不大,但需要對CAD軟件本身的命令語句比較熟悉。
為改變這種處理模式,構建如圖3所示的處理方法。

圖3 系統設計流程
該方法中,首先通過已經存在的圖紙文件構建對應對象的初始繪圖命令流,再編輯這個初始命令流形成對應對象的參數化繪圖模板文件,在模板文件中特別設計標記符號。程序運行時,通過選擇特定的繪制對象加載相應的模板,自動解析模板文件,獲取其中的標記符號,根據獲取信息自動創建相應的參數輸入界面。最后,在用戶輸入相應的參數后,替換原來命令流模板文件中的標記,形成一個新的完整命令流,并自動傳遞給CAD軟件執行,得到需要的CAD圖紙文件。該處理方法有別于傳統處理方法的核心在于,完全不是由程序生成命令的語句,即程序并不直接輸出如Line、ARC等命令語句的,只是替換模板文件中的參數占位符,由此提高方法的通用性,也可以讓用戶自行創建和修改模板文件。
本方法的源頭是需要與參數化繪圖對象對應的命令流模板。該命令流模板可以通過手工編輯產生,但需要對CAD命令語句及語法非常熟悉;同時還需要對繪制對象本身的特性很了解,比如軸系部件的繪制順序、繪制的細節等,無形中增加了開發的難度。為此,在構建命令流模板文件時,采用一種新思路,即通過已有的CAD圖紙文件來產生初始的命令流文件。采用程序技術將CAD圖紙文件轉換為CAD命令流,簡化命令流模板文件的創建。圖2所示即為與圖1對應圖紙根據該方法生成的命令流。
但圖2所示的命令流文本中,每個繪圖命令中仍然是一個具體的值,必須將具體的值變成參數的占位符號,才能變成命令流模板文件。此步驟非常關鍵,但人工逐一的修改很容易出錯。為方便構建模板文件,需要有相應的工具來簡化這個步驟。
觀察分析圖1可知:圖形之間一般存在較強的關聯性,例如:圖1正中3個圓有著相同的圓心,那么只需要定義一個參數,簡化參數的數量。若不考慮圖形間的關聯性,參數個數會增加很多,導致輸入界面比較復雜,降低用戶的使用體驗。因此需要能在選擇某個參數值后,自動選擇所有該初始命令流文件中的相同參數,并能全部或由用戶來決定是否替換為相應的占位標識符號。命令流模板文件輔助編輯界面見圖4。

圖4 命令流模板文件輔助編輯界面
在程序中定義一個字符串變量來存儲獲取到的命令流文本,將該命令流文本置于程序界面左側的文本框中,通過字符串切割函數,將字符串變量中的所有參數值分割出來,存儲在一個數組中,去除數組中重復的參數。用列表控件來顯示該數組,置于程序界面的右側。用戶每次在列表控件中點擊某個參數時,程序會在原字符串變量中匹配該參數,在左側文本框中使用高亮顏色來顯示,用戶即可編輯替換。編輯完成后,保存為命令流模板文件。通過該界面能加快命令流模板文件的創建。
分析命令流特征發現,在命令流中,存在參數之間的依賴關系,即有些參數是可以通過其他參數值來計算確定的,這樣可以簡化參數的數量。圖1中標記有“左下角小圓”與“中間最里層圓”為該圖紙的關鍵部分,標記有“左直線”、“左上角圓弧”與“上直線”以及其他未標記的部分為該圖紙的次要部分,若確定關鍵部分的參數信息,次要部分的參數信息即可由關鍵部分的參數信息計算得出。例如:左直線的長度可由左下角小圓的圓心坐標y1與中間最里層圓的圓心坐標y2計算得出;上直線的長度可由左下角小圓的圓心坐標x1與中間最里層圓的圓心坐標x2計算得出。
任意一份圖紙都會存在關鍵部分與次要部分,關鍵是如何確定。一種方法是通過對設計對象的理解,人工確定;另一種方法是通過讀取多份同類圖紙,分析其命令流,為每一份圖紙找出關鍵部分與次要部分。要實現通用化的CAD參數繪圖系統,必須采用第2種方法。限于篇幅關系,這個問題不展開。
將關鍵部分的命令流參數稱為“直接參數”,次要部分的命令流參數稱為“間接參數”。“直接參數”設定為由用戶手動輸入,“間接參數”設定為程序通過由輸入的“直接參數”計算得出。因此,設計中采用將命令流模板文件中的“標記符號”分為兩類:“直接參數”修改為含有“{和}”的標記占位符,“間接參數”修改為含有“[和]”的標記占位符。為了方便配置,將模板文件也分成“命令流模板”和“計算模板”兩類。圖1示例圖紙的部分命令流模板文件見圖5。

圖5 命令流模板文件
同時,為了能計算得出“間接參數”,還需在分析圖紙及其命令流的基礎上配置一份計算模板文件,在計算模板文件中給出參數間的計算關系。與圖5命令流模板文件配套的計算模板文件見圖6。

圖6 計算模板文件
程序運行時,用戶在選擇完需要進行參數化繪圖的模板文件后,程序會首先加載其中的命令流模板文件,再識別命令流模板文件中的“直接參數”占位符,構建一個表格式的參數輸入界面,見圖7。

圖7 參數輸入界面
表格式輸入界面的好處是不需要考慮界面的布局;而且,在參數比較多的情況下,傳統的1個控件輸入1個值的界面設計方式很難實現通用化。
在所有的“直接參數”輸入完畢后,還需要進行“間接參數”的計算,根據文獻[7]中的表達式解析思想,構建表達式計算分析類。
在.net平臺利用VB.net2017語言進行程序開發實現,分為兩個主要功能:①通過案例CAD圖紙文件生成對應的命令流文件,在此文件基礎上編輯形成命令流模板,編輯對應的計算參數配置模板,并將這些信息保存到數據庫;②構建用戶操作界面,提供用戶選擇需要繪制的對象圖紙類型,再根據選擇加載相應的命令流模板文件,自動識別模板文件中的參數,對應創建參數輸入界面,再根據用戶輸入替換命令流模板,形成完整命令流后傳遞給CAD軟件執行,得到最終的CAD圖紙。
程序的實現流程見圖8。

圖8 程序實現流程
將該方法應用在船舶軸系設計,產生的圖紙示例見圖9。

圖9 實現的效果示例
對比上下2個圖形,可以發現其中不僅是參數值的差異,也有圖元對象細節的差異。比如圖中下部的軸段中有過渡圓弧、有對稱軸線示意、有連接法蘭信息等,而上部的軸段則沒有這些細節信息。傳統的CAD參數化系統要實現這個差異,必須定義很多個系統配置參數,根據系統配置參數的用戶取值來決定輸出圖元對象時的細節。這樣,系統實現的復雜度明顯增加,而且不可能包含所有的細節配置特征,導致很多情況下只有修改源程序才能實現功能的修改。但本文構建的方法,其核心是命令流模板文件,針對同一個需要參數化繪制的對象,可以構建不同的命令流模板。如圖9所示,其上下分別為2個命令流模板文件所生成的,在下部圖元所對應的命令流模板中,包含了更多的細節繪制命令,因此輸出時就有更多的細節信息。因為命令流模板本質上是普通的文本文件,修改很方便,可以由用戶來修改命令流模板文件,給予用戶一定的自主調整的可能,而不需要修改源程序。因此,本方法實現的是一種CAD參數化繪圖系統的開發平臺,借助該平臺中提供的命令流模板文件的配置設定工具,只需要開發配置更多的命令流模板文件,就可以實現對CAD參數化繪制對象的擴展。
對現有CAD參數化繪圖系統,提出新的實現方法,利用已有的案例圖紙產生繪圖命令流初始文件,再通過相應的輔助工具創建形成命令流模板,模板文件中包括“直接參數”,和“間接參數”兩類占位符號。運行時通過創建好的命令流模板文件自動創建出相應的輸入界面,根據輸入參數進行計算后替換原來命令流模板文件形成新的繪圖命令流,實現參數化繪圖的目的。解決了其中配置化表達式計算、模板文件輔助編輯等關鍵問題。該方法將傳統的CAD參數化繪圖系統提升到平臺化開發的高度,已在實際的軸系輔助設計軟件中得到集成應用,效果良好。但在模板文件構建的方便性方面,還有進一步提升的空間。