江 濤, 何法江
(上海工程技術(shù)大學(xué) 航空運(yùn)輸學(xué)院, 上海 201620)
面對(duì)日益多樣化的用戶(hù)需求,Creo軟件本身的功能不可能滿(mǎn)足各種設(shè)計(jì)需要,特別是國(guó)外的CAD軟件在設(shè)計(jì)標(biāo)準(zhǔn)、規(guī)范上和國(guó)內(nèi)存在差異。因此對(duì)于Creo的二次開(kāi)發(fā)是必要的,開(kāi)發(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提供的二次開(kāi)發(fā)工具Creo Parametric Toolkit進(jìn)行二次開(kāi)發(fā),將其進(jìn)一步充實(shí)、完善、改進(jìn),這一研究工作是Creo 2.0軟件應(yīng)用過(guò)程中的重要任務(wù)[3-4]。
Creo設(shè)計(jì)助手的功能包括自動(dòng)保存功能、批量轉(zhuǎn)檔功能(三維轉(zhuǎn)IGS、STP格式,二維轉(zhuǎn)PDF、DWG格式)、批量添加參數(shù)及關(guān)系功能和右鍵菜單(三維建模命令、曲面命令、曲線命令、基準(zhǔn)命令、打開(kāi)工作目錄)的拓展。解決了Creo軟件無(wú)法實(shí)現(xiàn)批量轉(zhuǎn)檔、批量添加參數(shù)及關(guān)系等實(shí)際操作上的問(wèn)題,設(shè)計(jì)人員使用Creo建模時(shí)更加方便,達(dá)到提高工作效率、經(jīng)濟(jì)效益的目的。
Creo Parametric Toolkit 是功能強(qiáng)大的二次開(kāi)發(fā)工具,其開(kāi)發(fā)模式分為2種,即:同步模式(Synchronous Mode)和異步模式(Asynchronous Mode)[5-6]。由于后者Creo Parametric Toolkit應(yīng)用程序和Creo之間的通信方式為遙控程序,相比同步模式操作將使用較多的時(shí)間,且使用復(fù)雜,因此選用同步模式。選用動(dòng)態(tài)連接模式與對(duì)應(yīng)的開(kāi)發(fā)環(huán)境Microsoft Visual Studio 2010進(jìn)行開(kāi)發(fā)。
考慮到待開(kāi)發(fā)的設(shè)計(jì)助手包括的功能較多,統(tǒng)一調(diào)研設(shè)計(jì)調(diào)試較為復(fù)雜,因此決定逐一設(shè)計(jì)各個(gè)功能,最后將各功能集成即可。
在開(kāi)發(fā)之前,需對(duì)Microsoft Visual Studio 2010(以下簡(jiǎn)稱(chēng)VS2010)進(jìn)行環(huán)境搭建,以使Microsoft Visual Studio 2010 DLL庫(kù)與Creo建立連接。依次進(jìn)行自動(dòng)保存、批量轉(zhuǎn)檔、批量添加參數(shù)及關(guān)系的菜單設(shè)計(jì)和MFC對(duì)話框設(shè)計(jì)以及右鍵菜單的開(kāi)發(fā),將開(kāi)發(fā)的各功能集成并調(diào)試和完善,最終完成設(shè)計(jì)助手的開(kāi)發(fā)。具體技術(shù)路線如圖1所示。
圖1 技術(shù)路線圖
在開(kāi)發(fā)時(shí),先要進(jìn)行環(huán)境搭建,目的是建立Microsoft Visual Studio 2010 DLL庫(kù)與Creo的連接。
新建一個(gè)MFC-DLL項(xiàng)目,在此創(chuàng)建名為123的項(xiàng)目。設(shè)置活動(dòng)解決方案平臺(tái)為64位,右擊所創(chuàng)建的項(xiàng)目調(diào)出屬性頁(yè),包含電腦上Creo開(kāi)發(fā)包路徑。定義預(yù)處理器。接著選擇“多線程調(diào)試DLL”運(yùn)行庫(kù),包含電腦上Creo開(kāi)發(fā)庫(kù)路徑。輸入附加依賴(lài)項(xiàng)。至此,開(kāi)發(fā)環(huán)境已搭建完成,可正常使用Microsoft Visual Studio 2010進(jìn)行開(kāi)發(fā)。
(1)首先為自動(dòng)保存功能添加一個(gè)菜單欄按鈕。然后添加入口函數(shù)和出口函數(shù)。 要添加菜單欄按鈕,需使用添加主菜單函數(shù)ProMenubarMenuAdd,該函數(shù)使用格式中各參數(shù)含義見(jiàn)表1。
表1 ProMenubarMenuAdd函數(shù)使用格式中各參數(shù)含義
Tab. 1 The meaning of parameters in the format of ProMenubarMenuAdd function
類(lèi)型參數(shù)含義輸入ProMenuItemName 菜單的名稱(chēng)(必須是唯一的)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)簽的消息文件的名稱(chēng)
添加好主菜單后,為創(chuàng)建的主菜單添加按鈕,需要用到函數(shù)ProMenubar-menuPushbuttonAdd,該函數(shù)使用格式中各參數(shù)含義見(jiàn)表2。
表2 ProMenubar-menuPushbuttonAdd函數(shù)使用格式中各參數(shù)含義
此后需對(duì)按鈕添加動(dòng)作,使用ProCmdActionAdd函數(shù),該函數(shù)使用格式中各參數(shù)的含義見(jiàn)表3。
(2)菜單按鈕代碼編寫(xiě)完成后,需要在所創(chuàng)建的MFC-DLL文件中添加資源文件,用來(lái)將按鈕顯示在Creo菜單欄中。資源文件編寫(xiě)后,仍需編寫(xiě)注冊(cè)文件,才能在Creo輔助應(yīng)用程序中載入所開(kāi)發(fā)的二次開(kāi)發(fā)工具。在編寫(xiě)注冊(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ì)較為簡(jiǎn)單,只需放置一個(gè)文本編輯框用來(lái)存儲(chǔ)用戶(hù)輸入的自動(dòng)保存時(shí)間間隔,另外還需2個(gè)按鈕供用戶(hù)點(diǎn)擊開(kāi)始和取消自動(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í)間間隔通過(guò)用戶(hù)輸入到界面的文本編輯框,再?gòu)奈谋揪庉嬁蛑蝎@得數(shù)據(jù)。
表3 ProCmdActionAdd函數(shù)使用格式中各參數(shù)含義
Tab. 3 The meaning of parameters in the format of ProCmdActionAdd function
類(lèi)型參數(shù)含義輸入char* action_name動(dòng)作的名稱(chēng)(必須是唯一的)輸入uiCmdCmdActFn action_cb回調(diào)函數(shù)輸入uiCmdPriority priority定義相對(duì)于在執(zhí)行回調(diào)函數(shù)期間調(diào)用其他操作的操作優(yōu)先級(jí)輸入uiCmdAccessFn access_func定義動(dòng)作可訪問(wèn)性的功能輸入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)行開(kāi)發(fā)環(huán)境搭建,搭建過(guò)程詳見(jiàn)2.1。環(huán)境搭建完成后在1234.cpp中創(chuàng)建菜單按鈕,過(guò)程詳見(jiàn)2.1。代碼編譯完成后需要進(jìn)行資源文件和注冊(cè)文件的編寫(xiě)。其中CreoMenubar2為菜單的名稱(chēng),textCreo_button2為按鈕的名稱(chēng),textCreo_bu-tton2h為按鈕幫助信息的內(nèi)容。
(2)創(chuàng)建MFC對(duì)話框并使其通過(guò)點(diǎn)擊按鈕調(diào)用的過(guò)程詳見(jiàn)2.2,不做贅述。在此添加MFC的CDialog類(lèi)名為DLG2。批量轉(zhuǎn)檔的對(duì)話框首先應(yīng)存在一個(gè)列表控件用于存儲(chǔ)用戶(hù)選擇的需轉(zhuǎn)檔的文件名,并放置一個(gè)對(duì)應(yīng)的選擇文件按鈕,同時(shí)為了優(yōu)化用戶(hù)體驗(yàn),還應(yīng)設(shè)置額外的按鈕用于清空列表控件。轉(zhuǎn)檔需要用戶(hù)設(shè)置所要轉(zhuǎn)成的類(lèi)型,因此放置一個(gè)下拉菜單,存儲(chǔ)“IGS;STP;PDF;DWG;”字符串?dāng)?shù)據(jù)供用戶(hù)選擇。最后用戶(hù)需要選擇文件輸出目錄,用文本編輯框存放并放置一個(gè)對(duì)應(yīng)的選擇目錄按鈕。
根據(jù)需轉(zhuǎn)檔的類(lèi)型,使用的函數(shù)也不同。文件轉(zhuǎn)為dwg格式時(shí)使用的函數(shù)為Pro2dExport,該函數(shù)使用格式中各參數(shù)含義見(jiàn)表4。
表4 Pro2dExport函數(shù)使用格式中各參數(shù)含義
Tab. 4 The meaning of parameters in the format of Pro2dExport function
類(lèi)型參數(shù)含義輸入ProImportExportFile format要導(dǎo)出的文件類(lèi)型輸入ProPath filename要?jiǎng)?chuàng)建的導(dǎo)出文件的名稱(chēng)和絕對(duì)路徑輸入ProMdl model要從中導(dǎo)出信息的2d模型輸入Pro2dExportdata data用于導(dǎo)出的說(shuō)明,可以為NULL
(1)創(chuàng)建一個(gè)新的MFC-DLL文件,在此創(chuàng)建名為12345。同樣需進(jìn)行開(kāi)發(fā)環(huán)境搭建,搭建過(guò)程詳見(jiàn)2.1節(jié)。環(huán)境搭建完成后在12345.cpp中創(chuàng)建菜單按鈕,具體過(guò)程詳見(jiàn)2.2節(jié)。代碼編譯完成后則要進(jìn)行資源文件和注冊(cè)文件的編寫(xiě)。其中,CreoMenubar3為菜單的名稱(chēng),textCreo_button3為按鈕的名稱(chēng),textCre-o_button3h為按鈕幫助信息的內(nèi)容。
(2)創(chuàng)建MFC對(duì)話框并使其通過(guò)點(diǎn)擊按鈕調(diào)用的過(guò)程詳見(jiàn)2.2節(jié),不做贅述。在此添加MFC的CDialog類(lèi)名為DLG3。批量添加參數(shù)及關(guān)系的對(duì)話框首先應(yīng)存在3個(gè)列表空間,分別用于存儲(chǔ)用戶(hù)選擇的需添加參數(shù)和關(guān)系的模型名稱(chēng)、用戶(hù)設(shè)置的參數(shù)名稱(chēng)和參數(shù)值以及用戶(hù)輸入的關(guān)系式,每個(gè)列表控件下應(yīng)有對(duì)應(yīng)功能的按鈕供用戶(hù)點(diǎn)擊。為了優(yōu)化用戶(hù)體驗(yàn),在模型列表下還應(yīng)設(shè)置“清空列表”按鈕用于清空存放模型名稱(chēng)的列表控件。同樣在參數(shù)列表下,應(yīng)設(shè)置修改參數(shù)的功能按鈕以及可供用戶(hù)選擇參數(shù)類(lèi)型的下拉菜單,下拉菜單中可選的參數(shù)類(lèi)型為“字符串;實(shí)數(shù);整數(shù);”。
批量添加參數(shù)主要用到的函數(shù)為ProParameterCreate,功能為創(chuàng)建參數(shù)。該函數(shù)使用格式中各參數(shù)含義見(jiàn)表5。
表5 ProParameterCreate函數(shù)使用格式中各參數(shù)含義
Tab. 5 The meaning of parameters in the format of ProParameterCreate function
類(lèi)型參數(shù)含義輸入ProModelitem* owner所有者(模型項(xiàng)目或?qū)嶓w)輸入ProName name參數(shù)的名稱(chēng)輸入ProParamvalue* proval參數(shù)將保留的初始數(shù)據(jù)輸出ProParameter* param創(chuàng)建和初始化的句柄
在已創(chuàng)建好的MFC-DLL文件中,添加一個(gè)程序的源文件,在此命名為“P-OPMENU.cpp”。(開(kāi)發(fā)環(huán)境已搭建完成)。
考慮到需使用戶(hù)體驗(yàn)良好且界面整潔,決定將設(shè)置及打開(kāi)工作目錄、樣條曲線命令對(duì)應(yīng)按鈕添加到模型樹(shù)右鍵菜單中,將基準(zhǔn)命令、曲面命令、三維建模命令對(duì)應(yīng)按鈕添加到模型右鍵菜單中。要添加模型樹(shù)右鍵菜單,須在自定義的模型樹(shù)右鍵菜單入口函數(shù)中編寫(xiě)代碼,所使用的添加方法及函數(shù)與添加菜單欄按鈕大致相同,添加模型右鍵菜單則需通過(guò)調(diào)用函數(shù)ProNotificationSet的方法,該函數(shù)的作用就是設(shè)置要為指定操作調(diào)用的通知函數(shù),可以將彈出右鍵菜單的通知添加到會(huì)話中。該函數(shù)使用格式中各參數(shù)含義見(jiàn)表6。
表6 ProNotificationSet函數(shù)使用格式中各參數(shù)含義
Tab. 6 The meaning of parameters in the format of ProNotificationSet function
類(lèi)型參數(shù)含義輸入ProNotifyType type將進(jìn)行的操作輸入ProFunction notify_function需調(diào)用的動(dòng)作函數(shù)
打開(kāi)設(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)的變量和類(lèi),復(fù)制粘貼前編寫(xiě)代碼并編譯調(diào)試,修改或去除重定義或多余的變量并經(jīng)反復(fù)編譯調(diào)試,最后,就是編寫(xiě)資源文件,重新生成解決方案無(wú)問(wèn)題,即功能集成完成。
打開(kāi)Creo,點(diǎn)擊工具欄中的“應(yīng)用程序”→“注冊(cè)”,找到.dat文件并加載,至此,基于Creo的設(shè)計(jì)助手二次開(kāi)發(fā)全部完成。
Creo2.0作為一款設(shè)計(jì)軟件本身的功能已經(jīng)相當(dāng)完善,但在輔助設(shè)計(jì)方面還存在一些不足。因此本文在Creo原有功能的基礎(chǔ)上,開(kāi)發(fā)了一套設(shè)計(jì)助手輔助工具。該助手以Microsoft Visual Studio 2010軟件為工具,利用Creo提供的二次開(kāi)發(fā)工具Creo Parametric Toolkit進(jìn)行開(kāi)發(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á)到方便工作人員操作,提高工作效率的目的。