江 濤, 何法江
(上海工程技術(shù)大學(xué) 航空運(yùn)輸學(xué)院, 上海 201620)
面對(duì)日益多樣化的用戶需求,Creo軟件本身的功能不可能滿足各種設(shè)計(jì)需要,特別是國外的CAD軟件在設(shè)計(jì)標(biāo)準(zhǔn)、規(guī)范上和國內(nèi)存在差異。因此對(duì)于Creo的二次開發(fā)是必要的,開發(fā)出適合本單位的應(yīng)用程序,提高產(chǎn)品的設(shè)計(jì)效率,加快產(chǎn)品更新速度[1-3]。基于這一點(diǎn),為了使軟件能夠在企業(yè)特定產(chǎn)品設(shè)計(jì)中最大限度地發(fā)揮潛力,達(dá)到提高經(jīng)濟(jì)效益的目的,就需要應(yīng)用Creo2.0提供的二次開發(fā)工具Creo Parametric Toolkit進(jìn)行二次開發(fā),將其進(jìn)一步充實(shí)、完善、改進(jìn),這一研究工作是Creo 2.0軟件應(yīng)用過程中的重要任務(wù)[3-4]。
Creo設(shè)計(jì)助手的功能包括自動(dòng)保存功能、批量轉(zhuǎn)檔功能(三維轉(zhuǎn)IGS、STP格式,二維轉(zhuǎn)PDF、DWG格式)、批量添加參數(shù)及關(guān)系功能和右鍵菜單(三維建模命令、曲面命令、曲線命令、基準(zhǔn)命令、打開工作目錄)的拓展。解決了Creo軟件無法實(shí)現(xiàn)批量轉(zhuǎn)檔、批量添加參數(shù)及關(guān)系等實(shí)際操作上的問題,設(shè)計(jì)人員使用Creo建模時(shí)更加方便,達(dá)到提高工作效率、經(jīng)濟(jì)效益的目的。
Creo Parametric Toolkit 是功能強(qiáng)大的二次開發(fā)工具,其開發(fā)模式分為2種,即:同步模式(Synchronous Mode)和異步模式(Asynchronous Mode)[5-6]。由于后者Creo Parametric Toolkit應(yīng)用程序和Creo之間的通信方式為遙控程序,相比同步模式操作將使用較多的時(shí)間,且使用復(fù)雜,因此選用同步模式。選用動(dòng)態(tài)連接模式與對(duì)應(yīng)的開發(fā)環(huán)境Microsoft Visual Studio 2010進(jìn)行開發(fā)。
考慮到待開發(fā)的設(shè)計(jì)助手包括的功能較多,統(tǒng)一調(diào)研設(shè)計(jì)調(diào)試較為復(fù)雜,因此決定逐一設(shè)計(jì)各個(gè)功能,最后將各功能集成即可。
在開發(fā)之前,需對(duì)Microsoft Visual Studio 2010(以下簡稱VS2010)進(jìn)行環(huán)境搭建,以使Microsoft Visual Studio 2010 DLL庫與Creo建立連接。依次進(jìn)行自動(dòng)保存、批量轉(zhuǎn)檔、批量添加參數(shù)及關(guān)系的菜單設(shè)計(jì)和MFC對(duì)話框設(shè)計(jì)以及右鍵菜單的開發(fā),將開發(fā)的各功能集成并調(diào)試和完善,最終完成設(shè)計(jì)助手的開發(fā)。具體技術(shù)路線如圖1所示。

圖1 技術(shù)路線圖
在開發(fā)時(shí),先要進(jìn)行環(huán)境搭建,目的是建立Microsoft Visual Studio 2010 DLL庫與Creo的連接。
新建一個(gè)MFC-DLL項(xiàng)目,在此創(chuàng)建名為123的項(xiàng)目。設(shè)置活動(dòng)解決方案平臺(tái)為64位,右擊所創(chuàng)建的項(xiàng)目調(diào)出屬性頁,包含電腦上Creo開發(fā)包路徑。定義預(yù)處理器。接著選擇“多線程調(diào)試DLL”運(yùn)行庫,包含電腦上Creo開發(fā)庫路徑。輸入附加依賴項(xiàng)。至此,開發(fā)環(huán)境已搭建完成,可正常使用Microsoft Visual Studio 2010進(jìn)行開發(fā)。
(1)首先為自動(dòng)保存功能添加一個(gè)菜單欄按鈕。然后添加入口函數(shù)和出口函數(shù)。 要添加菜單欄按鈕,需使用添加主菜單函數(shù)ProMenubarMenuAdd,該函數(shù)使用格式中各參數(shù)含義見表1。
表1 ProMenubarMenuAdd函數(shù)使用格式中各參數(shù)含義
Tab. 1 The meaning of parameters in the format of ProMenubarMenuAdd function

類型參數(shù)含義輸入ProMenuItemName 菜單的名稱(必須是唯一的)menu_name輸入ProMenuItemLabel菜單的標(biāo)簽untranslated_menu_label輸入ProMenuItemName neigh-bor菜單欄中的相鄰菜單輸入ProBoolean定義是否將菜單添加到鄰居add_after_neighbor菜單的左側(cè)或右側(cè)PRO_B_TRUE指定在右側(cè)輸入ProFileName filename包含標(biāo)簽的消息文件的名稱
添加好主菜單后,為創(chuàng)建的主菜單添加按鈕,需要用到函數(shù)ProMenubar-menuPushbuttonAdd,該函數(shù)使用格式中各參數(shù)含義見表2。

表2 ProMenubar-menuPushbuttonAdd函數(shù)使用格式中各參數(shù)含義
此后需對(duì)按鈕添加動(dòng)作,使用ProCmdActionAdd函數(shù),該函數(shù)使用格式中各參數(shù)的含義見表3。
(2)菜單按鈕代碼編寫完成后,需要在所創(chuàng)建的MFC-DLL文件中添加資源文件,用來將按鈕顯示在Creo菜單欄中。資源文件編寫后,仍需編寫注冊(cè)文件,才能在Creo輔助應(yīng)用程序中載入所開發(fā)的二次開發(fā)工具。在編寫注冊(cè)文件前,需先在Microsoft Visual Studio 2010中生成MFC-DLL的解決方案,生成結(jié)束后會(huì)在MFC-DLL文件夾中自動(dòng)創(chuàng)建對(duì)應(yīng)的.dll文件。
(3)接著調(diào)用MFC對(duì)話框并設(shè)計(jì)MFC對(duì)話框。自動(dòng)保存功能的對(duì)話框設(shè)計(jì)較為簡單,只需放置一個(gè)文本編輯框用來存儲(chǔ)用戶輸入的自動(dòng)保存時(shí)間間隔,另外還需2個(gè)按鈕供用戶點(diǎn)擊開始和取消自動(dòng)保存。由于要實(shí)現(xiàn)自動(dòng)保存功能,即每隔一段時(shí)間當(dāng)前Creo自動(dòng)保存一次,因此需要調(diào)用時(shí)間計(jì)時(shí)器。設(shè)置時(shí)間計(jì)時(shí)器的動(dòng)作函數(shù)為保存Creo當(dāng)前模型,將其作為回調(diào)函數(shù),每隔一段時(shí)間自動(dòng)調(diào)用該函數(shù)即可完成自動(dòng)保存。其中,時(shí)間間隔通過用戶輸入到界面的文本編輯框,再從文本編輯框中獲得數(shù)據(jù)。
表3 ProCmdActionAdd函數(shù)使用格式中各參數(shù)含義
Tab. 3 The meaning of parameters in the format of ProCmdActionAdd function

類型參數(shù)含義輸入char* action_name動(dòng)作的名稱(必須是唯一的)輸入uiCmdCmdActFn action_cb回調(diào)函數(shù)輸入uiCmdPriority priority定義相對(duì)于在執(zhí)行回調(diào)函數(shù)期間調(diào)用其他操作的操作優(yōu)先級(jí)輸入uiCmdAccessFn access_func定義動(dòng)作可訪問性的功能輸入ProBoolean allow_in_non_active_window定義此動(dòng)作是否可以在非活動(dòng)的Creo Parametric窗口中執(zhí)行輸入ProBoolean allow_in_accessory_window定義此操作是否可以在附件Creo Parametric窗口中執(zhí)行輸入uiCmdCmdId* action_id動(dòng)作的標(biāo)識(shí)符
(1)創(chuàng)建一個(gè)新的MFC-DLL文件,在此創(chuàng)建名為“1234”。同樣需進(jìn)行開發(fā)環(huán)境搭建,搭建過程詳見2.1。環(huán)境搭建完成后在1234.cpp中創(chuàng)建菜單按鈕,過程詳見2.1。代碼編譯完成后需要進(jìn)行資源文件和注冊(cè)文件的編寫。其中CreoMenubar2為菜單的名稱,textCreo_button2為按鈕的名稱,textCreo_bu-tton2h為按鈕幫助信息的內(nèi)容。
(2)創(chuàng)建MFC對(duì)話框并使其通過點(diǎn)擊按鈕調(diào)用的過程詳見2.2,不做贅述。在此添加MFC的CDialog類名為DLG2。批量轉(zhuǎn)檔的對(duì)話框首先應(yīng)存在一個(gè)列表控件用于存儲(chǔ)用戶選擇的需轉(zhuǎn)檔的文件名,并放置一個(gè)對(duì)應(yīng)的選擇文件按鈕,同時(shí)為了優(yōu)化用戶體驗(yàn),還應(yīng)設(shè)置額外的按鈕用于清空列表控件。轉(zhuǎn)檔需要用戶設(shè)置所要轉(zhuǎn)成的類型,因此放置一個(gè)下拉菜單,存儲(chǔ)“IGS;STP;PDF;DWG;”字符串?dāng)?shù)據(jù)供用戶選擇。最后用戶需要選擇文件輸出目錄,用文本編輯框存放并放置一個(gè)對(duì)應(yīng)的選擇目錄按鈕。
根據(jù)需轉(zhuǎn)檔的類型,使用的函數(shù)也不同。文件轉(zhuǎn)為dwg格式時(shí)使用的函數(shù)為Pro2dExport,該函數(shù)使用格式中各參數(shù)含義見表4。
表4 Pro2dExport函數(shù)使用格式中各參數(shù)含義
Tab. 4 The meaning of parameters in the format of Pro2dExport function

類型參數(shù)含義輸入ProImportExportFile format要導(dǎo)出的文件類型輸入ProPath filename要?jiǎng)?chuàng)建的導(dǎo)出文件的名稱和絕對(duì)路徑輸入ProMdl model要從中導(dǎo)出信息的2d模型輸入Pro2dExportdata data用于導(dǎo)出的說明,可以為NULL
(1)創(chuàng)建一個(gè)新的MFC-DLL文件,在此創(chuàng)建名為12345。同樣需進(jìn)行開發(fā)環(huán)境搭建,搭建過程詳見2.1節(jié)。環(huán)境搭建完成后在12345.cpp中創(chuàng)建菜單按鈕,具體過程詳見2.2節(jié)。代碼編譯完成后則要進(jìn)行資源文件和注冊(cè)文件的編寫。其中,CreoMenubar3為菜單的名稱,textCreo_button3為按鈕的名稱,textCre-o_button3h為按鈕幫助信息的內(nèi)容。
(2)創(chuàng)建MFC對(duì)話框并使其通過點(diǎn)擊按鈕調(diào)用的過程詳見2.2節(jié),不做贅述。在此添加MFC的CDialog類名為DLG3。批量添加參數(shù)及關(guān)系的對(duì)話框首先應(yīng)存在3個(gè)列表空間,分別用于存儲(chǔ)用戶選擇的需添加參數(shù)和關(guān)系的模型名稱、用戶設(shè)置的參數(shù)名稱和參數(shù)值以及用戶輸入的關(guān)系式,每個(gè)列表控件下應(yīng)有對(duì)應(yīng)功能的按鈕供用戶點(diǎn)擊。為了優(yōu)化用戶體驗(yàn),在模型列表下還應(yīng)設(shè)置“清空列表”按鈕用于清空存放模型名稱的列表控件。同樣在參數(shù)列表下,應(yīng)設(shè)置修改參數(shù)的功能按鈕以及可供用戶選擇參數(shù)類型的下拉菜單,下拉菜單中可選的參數(shù)類型為“字符串;實(shí)數(shù);整數(shù);”。
批量添加參數(shù)主要用到的函數(shù)為ProParameterCreate,功能為創(chuàng)建參數(shù)。該函數(shù)使用格式中各參數(shù)含義見表5。
表5 ProParameterCreate函數(shù)使用格式中各參數(shù)含義
Tab. 5 The meaning of parameters in the format of ProParameterCreate function

類型參數(shù)含義輸入ProModelitem* owner所有者(模型項(xiàng)目或?qū)嶓w)輸入ProName name參數(shù)的名稱輸入ProParamvalue* proval參數(shù)將保留的初始數(shù)據(jù)輸出ProParameter* param創(chuàng)建和初始化的句柄
在已創(chuàng)建好的MFC-DLL文件中,添加一個(gè)程序的源文件,在此命名為“P-OPMENU.cpp”。(開發(fā)環(huán)境已搭建完成)。
考慮到需使用戶體驗(yàn)良好且界面整潔,決定將設(shè)置及打開工作目錄、樣條曲線命令對(duì)應(yīng)按鈕添加到模型樹右鍵菜單中,將基準(zhǔn)命令、曲面命令、三維建模命令對(duì)應(yīng)按鈕添加到模型右鍵菜單中。要添加模型樹右鍵菜單,須在自定義的模型樹右鍵菜單入口函數(shù)中編寫代碼,所使用的添加方法及函數(shù)與添加菜單欄按鈕大致相同,添加模型右鍵菜單則需通過調(diào)用函數(shù)ProNotificationSet的方法,該函數(shù)的作用就是設(shè)置要為指定操作調(diào)用的通知函數(shù),可以將彈出右鍵菜單的通知添加到會(huì)話中。該函數(shù)使用格式中各參數(shù)含義見表6。
表6 ProNotificationSet函數(shù)使用格式中各參數(shù)含義
Tab. 6 The meaning of parameters in the format of ProNotificationSet function

類型參數(shù)含義輸入ProNotifyType type將進(jìn)行的操作輸入ProFunction notify_function需調(diào)用的動(dòng)作函數(shù)
打開設(shè)計(jì)完成的自動(dòng)保存功能DLL文件,創(chuàng)建2個(gè)MFC對(duì)話框用于批量轉(zhuǎn)檔和批量添加參數(shù)及關(guān)系功能的實(shí)現(xiàn),添加新的.cpp源文件用于右鍵菜單的創(chuàng)建。為MFC控件添加對(duì)應(yīng)的變量和類,復(fù)制粘貼前編寫代碼并編譯調(diào)試,修改或去除重定義或多余的變量并經(jīng)反復(fù)編譯調(diào)試,最后,就是編寫資源文件,重新生成解決方案無問題,即功能集成完成。
打開Creo,點(diǎn)擊工具欄中的“應(yīng)用程序”→“注冊(cè)”,找到.dat文件并加載,至此,基于Creo的設(shè)計(jì)助手二次開發(fā)全部完成。
Creo2.0作為一款設(shè)計(jì)軟件本身的功能已經(jīng)相當(dāng)完善,但在輔助設(shè)計(jì)方面還存在一些不足。因此本文在Creo原有功能的基礎(chǔ)上,開發(fā)了一套設(shè)計(jì)助手輔助工具。該助手以Microsoft Visual Studio 2010軟件為工具,利用Creo提供的二次開發(fā)工具Creo Parametric Toolkit進(jìn)行開發(fā)。設(shè)計(jì)助手包括自動(dòng)保存、批量轉(zhuǎn)檔(三維轉(zhuǎn)IGS、STP格式,二維轉(zhuǎn)PDF、DWG)、批量添加參數(shù)、批量添加關(guān)系、右鍵菜單拓展等內(nèi)容,并結(jié)合MFC對(duì)話框設(shè)計(jì)出良好的人機(jī)交互界面,以達(dá)到方便工作人員操作,提高工作效率的目的。