王思遠(yuǎn),賀成柱
(甘肅省機(jī)械科學(xué)研究院,甘肅省機(jī)械產(chǎn)品檢測與技術(shù)評價重點(diǎn)實(shí)驗室,甘肅 蘭州 730030)
基于Pro/Toolkit的Pro/E工程圖標(biāo)注系統(tǒng)的二次開發(fā)研究
王思遠(yuǎn),賀成柱
(甘肅省機(jī)械科學(xué)研究院,甘肅省機(jī)械產(chǎn)品檢測與技術(shù)評價重點(diǎn)實(shí)驗室,甘肅蘭州730030)
針對Pro/E系統(tǒng)中工程圖標(biāo)注的繁瑣難題,利用VC++技術(shù)和Pro/E二次開發(fā)工具包Pro/Toolkit,通過動態(tài)鏈接庫方式對Pro/E中工程圖的公差標(biāo)注系統(tǒng)進(jìn)行二次開發(fā),并對菜單開發(fā)和MFC可視化對話框開發(fā)設(shè)計的關(guān)鍵技術(shù)進(jìn)行了研究,實(shí)現(xiàn)了形位公差、尺寸公差標(biāo)注符號類型和各參數(shù)的選擇與輸入,有助于用戶在使用過程中能迅速、快捷、準(zhǔn)確的完成工程圖的標(biāo)注。
Pro/E;Pro/Toolkit;公差標(biāo)注;二次開發(fā);VC++
Pro/ENGINEER(以下簡稱Pro/E)軟件是由美國PTC公司開發(fā)并研制的一款三維設(shè)計軟件,它將CAD/CAPP/CAM功能集于一體化,不僅具有“參數(shù)化、相關(guān)化”的特點(diǎn),而且具有更加細(xì)致而強(qiáng)大的設(shè)計、分析、制造等功能,可以為工業(yè)產(chǎn)品的開發(fā)設(shè)計提供了一套完整的解決方案,因此,應(yīng)用范圍涉及到航空、機(jī)械設(shè)計、數(shù)控加工、有限元分析等諸多領(lǐng)域,當(dāng)前Pro/E在我國的應(yīng)用比較比較廣泛。
一般產(chǎn)品的三維設(shè)計軟件應(yīng)具備快速反求的設(shè)計開發(fā)功能,系統(tǒng)的界面設(shè)計要更專業(yè)化、智能化、人性化,各個模塊之間要無縫連接,以快速設(shè)計為最終開發(fā)的目標(biāo)。在國內(nèi)各大企業(yè)實(shí)際生產(chǎn)當(dāng)中,二維工程圖紙從產(chǎn)品的研發(fā)到裝配過程中占據(jù)了重要的地位,它是產(chǎn)品設(shè)計與制造的技術(shù)核心,必須具備行業(yè)規(guī)范性和標(biāo)準(zhǔn)性,特別是工程圖的二維標(biāo)注標(biāo)注符號、標(biāo)題欄及其他標(biāo)注信息等[1]。二維工程圖在Pro/E環(huán)境下,其標(biāo)注功能較為薄弱,并且有些標(biāo)注方法與國際標(biāo)準(zhǔn)不相符。所以更多的企業(yè)提出了二次開發(fā)的需求,通過對Pro/E二次開發(fā),不僅使軟件具備了更高的實(shí)用性,而且能夠提高產(chǎn)品的開發(fā)效率,這樣以來大大縮短了產(chǎn)品的設(shè)計周期。這將使得企業(yè)和用戶擺脫了二維工程圖圖紙上的重復(fù)繁瑣的標(biāo)注,在一定程度上提高了對工程圖二維標(biāo)注的處理能力。
本文針對形位公差國際化標(biāo)注進(jìn)行了一些研究,在Pro/E Wildfire 5.0的環(huán)境下,主要使用Pro/ Toolkit工具包。在VC++平臺上利用MFC對話框的可視化技術(shù)開發(fā)了符合國際標(biāo)準(zhǔn)的形位公差符號標(biāo)注功能,有效地解決了工程圖中形位公差符號標(biāo)注上的繁瑣難題。
Pro/E自帶的二次開發(fā)工具包包括Pro/Toolkit、J-link等。用戶可以通過Pro/Toolkit工具包獲得大量的C語言函數(shù)庫。如果用戶想要方便地訪問Pro/ E的內(nèi)部數(shù)據(jù)庫及應(yīng)用程序,可以通過調(diào)用最底層函數(shù)的方式來實(shí)現(xiàn),企業(yè)或用戶可以根據(jù)自己的需求進(jìn)行二次開發(fā),通過C程序代碼來擴(kuò)充Pro/E的其它所需要的功能。
Pro/Toolkit應(yīng)用程序有兩種工作模式:異步和同步模式。
1)異步模式:Pro/Toolkit應(yīng)用程序可以在Pro/E系統(tǒng)關(guān)閉的狀態(tài)下單獨(dú)運(yùn)行,這樣就實(shí)現(xiàn)了兩個程序的獨(dú)立運(yùn)行,Pro/E系統(tǒng)在需要調(diào)用Pro/E功能的時候再啟動運(yùn)行。異步模式的程序代碼復(fù)雜并且運(yùn)行速度比較慢,因此一般不采用異步模式。
2)同步模式:Pro/Toolkit應(yīng)用程序與Pro/E系統(tǒng)必須同步運(yùn)行,Pro/Toolkit應(yīng)用程序在Pro/E系統(tǒng)關(guān)閉的狀態(tài)下是無法運(yùn)行的。同步模式又分為DLL模式和多進(jìn)程模式,Pro/Toolkit應(yīng)用程序集成到Pro/E系統(tǒng)中的標(biāo)準(zhǔn)方法就是DLL模式。考慮到Pro/ Toolkit應(yīng)用程序的運(yùn)行都在Pro/E系統(tǒng)里,所以一般采用同步模式。
Pro/Toolkit開發(fā)應(yīng)用程序在使用過程中包括3個基本步驟:
1.1編寫源文件
Pro/Toolkit應(yīng)用程序整體上有3部分組成:頭文件包含部分、用戶初始化函數(shù)和用戶結(jié)束中斷函數(shù)部分。
頭文件包含部分是指定應(yīng)用程序所使用對象函數(shù)的原型文件,每個應(yīng)用程序都必須包含的頭文件是“Pro/Toolkit.h”否則在編譯該文件時就會出現(xiàn)錯誤。
源文件包括:對話框源文件、菜單資源文件及程序源文件,其中程序源文件是要進(jìn)行編寫的C語言程序,它包括定義的菜單內(nèi)容及動作,是整個二次開發(fā)的核心部分。
在同步模式下,Pro/Toolkit應(yīng)用程序中必須包含這兩個核心函數(shù):初始化函數(shù)user_initializ(),該函數(shù)主要是用戶用來設(shè)置需要添加的菜單,以及其他的一些初始值設(shè)置或直接調(diào)用所需的函數(shù)等;終止函數(shù)user_terminate(),該函數(shù)主要用來執(zhí)行程序結(jié)束時的處理工作,如釋放程序中全局變量的內(nèi)存等。這兩個函數(shù)都應(yīng)該放在與工程文件名同名的cpp文件中。
1.2編譯鏈接程序
程序代碼編寫完成后,就可以在VC++中編譯鏈接Pro/Toolkit函數(shù)庫和MFC(Microsoft
Foundation Classes)類庫的程序,最終可生成在Pro/E中注冊運(yùn)行的DLL文件。Makefile文件在整個編譯連接的過程中起著很重要的作用,其中包括:指定頭文件、源文件、庫文件的位置;生成可執(zhí)行文件和動態(tài)連接庫名稱等。一般Makefile文件在用戶開發(fā)一個VC項目時,就會在VC中自動生成并集成到VC環(huán)境中。因此,用戶可以不用編寫Makefile文件。
1.3注冊運(yùn)行Pro/Toolkit應(yīng)用程序
編寫一個文本文件的擴(kuò)展名為.dat的文件作為注冊文件,注冊文件是向Pro/E提供應(yīng)用程序的信息。Pro/Toolkit應(yīng)用程序有兩種注冊方式:
1)自動注冊的方式:第一種方式是將注冊文件protk.dat保存在Pro/E安裝目錄的 ext目錄,或者位于Pro/E起始位置設(shè)定的目錄下,在運(yùn)行Pro/E時,Pro/E將自動啟動注冊文件里的所有Pro/Toolkit應(yīng)用程序。如果在注冊文件設(shè)置DELAY_START的值為TRUE時,在啟動Pro/E時Pro/Toolkit應(yīng)用程序?qū)⒆詣舆\(yùn)行,否則必須用手動來運(yùn)行。第二種方式是在Pro/E的config.pro文件設(shè)定為注冊文件但是系統(tǒng)的變量名必須為toolkit_registry_file。
2)手動注冊方式:在Pro/E運(yùn)行的界面上單擊“工具”主菜單下的“輔助應(yīng)用程序”子菜單,然后在彈出的對話框中選“注冊”按鈕,按路徑選擇所建立的protk.dat文件,注冊成功后選擇“啟動”按鈕運(yùn)行程序。
注冊文件編寫格式如下:
2.1標(biāo)注系統(tǒng)的二次開發(fā)流程
通過二次開發(fā),Pro/E中形位公差標(biāo)注的繁瑣與不足得到了很好的改善,以交互的方式實(shí)現(xiàn)了直觀友好的對話,從而達(dá)到快捷,準(zhǔn)確的標(biāo)注目標(biāo)。形位公差國際標(biāo)注系統(tǒng)的開發(fā)流程如圖1所示。
圖1 開發(fā)流程圖
2.2菜單的編寫技術(shù)
在Pro/E中,幾乎所有的操作命令都是通過菜單或按鈕來實(shí)現(xiàn)相應(yīng)的操作,在Pro/E二次開發(fā)中,用戶可以通過Pro/Toolkit,利用其提供的函數(shù)自定義拓展以及使用緊密結(jié)合的且操作起來方便的個性化菜單。一個完整的菜單編寫代碼里應(yīng)包含兩個
Pro/Toolkit函數(shù):ProCmdActionAdd()和
ProMenubarmenuPushbuttonAdd()函數(shù)。
以下是本程序的菜單添加的相應(yīng)函數(shù)設(shè)置∶
1)status=ProMenubarMenuAdd("CHECK"," CHECK","Utilities",PRO_B_TRUE,MsgFile);
此函數(shù)的功能是:在Pro/E界面上添加一個新的菜單。
2)ProCmdActionAdd("ShowTest1",(uiCmdCmdActFn)
UsrPlanesTol,uiCmdPrioDefault,AccessDefault,PRO_B_TRUE,PRO_B_TRUE,&cmd_id1);
此函數(shù)的功能是:設(shè)置Pro/E菜單項時所需要執(zhí)行的動作函數(shù),這個函數(shù)命令和按鈕捆綁在一起。參數(shù)ShowTest1是動作命令名,但是動作命令名必須是唯一的;參數(shù)uiCmdPrioDefault是命令的優(yōu)先級別,指該動作函數(shù)優(yōu)先于向Pro/E里加的其它動作函數(shù)的等級;參數(shù)&cmd_id1是動作函數(shù)的命令標(biāo)示號,在調(diào)用動作ProMenubarmenuPushbuttonAdd函數(shù)時作為作為輸入?yún)?shù)。
3)ProMenubarmenuPushbuttonAdd("CHECK"," UsrPlanesTol","UsrPlanesTol","Active UsrPlanesTol menu",NULL,PRO_B_TRUE,cmd_id1,ProString-ToWstring(message_file,"message2.txt"))。
此函數(shù)的功能是:用來添加所需要的菜單按鈕。參數(shù)UsrPlanesTol是菜單標(biāo)簽名,該值必須與信息文件中同組的標(biāo)示關(guān)鍵字相同。
本文設(shè)計的菜單如圖2所示:
圖2 所添加的菜單
2.3MFC可視化對話框的創(chuàng)建技術(shù)
目前,人機(jī)交互界面最流行的一種方式為彈出式對話框,用戶通過對話框?qū)?shù)信息進(jìn)行輸入或顯示數(shù)據(jù),本文采用VisualC++的MFC可視化對話框技術(shù)來實(shí)現(xiàn)。MFC設(shè)計對話框技術(shù)通過面向?qū)ο蟮姆椒▉碚{(diào)用API,并且提供了文檔框架的視圖和活動文檔,這是優(yōu)于UI對話框技術(shù)的一個關(guān)鍵作用,這樣使用戶可以根據(jù)自己的需求自定義應(yīng)用程序框架,使得操作起來比較靈活、高效、修改和調(diào)試也簡單。
對話框有兩種類型:模式和無模式對話框,前者是激活當(dāng)前對話框的條件下不能激活另外的對話框,只有關(guān)閉該對話框才能對其他對話框進(jìn)行操作。后者恰恰相反,它是激活一個對話框的同時還可以激活另外的對話框,可以不關(guān)閉前一個對話框,但是前一個對話框處于非活動狀態(tài),這種模式的對話框使得操作起來沒有更多的限制。
在Pro/E系統(tǒng)中調(diào)用MFC可視化對話框的關(guān)鍵問題就是要實(shí)現(xiàn) Pro/TOOLKIT、Pro/E系統(tǒng)和MFC對話框三者之間的通信。因為Pro/TOOLKIT本??身并不支持對MFC可視化對話框開發(fā)設(shè)計,本文采用動態(tài)鏈接庫 (DLL)方式來實(shí)現(xiàn) Pro/T??OOLKIT與MFC之間的通信,同樣??DLL方式也可以在Pro/E與Pro/TOOLKIT??之間相互通信。DLL的產(chǎn)生則由MFC根據(jù)Pro/TOOLKIT的環(huán)境要求設(shè)置后進(jìn)行編程實(shí)現(xiàn),應(yīng)用程序功能就完全集成到DLL中,其中接口方案如下圖3所示。
圖3 二次開發(fā)接口的實(shí)現(xiàn)方案
本文按如下步驟,實(shí)現(xiàn)MFC對話框的開發(fā)設(shè)計[3]:
1)新建一個MFC DLL的項目。用AppWizard創(chuàng)Pro/T OOLKIT應(yīng)用程序框架,在該項目文件里設(shè)置好頭文件、庫文件和項目的其它屬性。
2)在該項目.cpp文件里內(nèi)添加常用的頭文件、初始化函數(shù)和終止函數(shù),如果對話框需要Pro/E菜單項啟動的話,就要在user_initializ()里添加菜單按鈕函數(shù)和動作函數(shù)設(shè)置。
3)創(chuàng)建對話框資源。在VC++的集成環(huán)境里調(diào)整并設(shè)置對話框的布局等屬性,如調(diào)整對話框大小、添加文本空間、選擇控件等。
4)創(chuàng)建對話框類。對話框界面設(shè)計好之后就可以用ClassWizard創(chuàng)建一個對話框類。自動生成CDialog派生類定義的頭文件Dlg.h和實(shí)現(xiàn)文件Dlg. cpp。
5)創(chuàng)建和顯示對話框。設(shè)置好類的成員變量函數(shù)之后,就可以編寫并實(shí)現(xiàn)每個函數(shù)功能的代碼。
6)生成Pro/T OOLKIT應(yīng)用程序。
下面給出了無模式對話框圖4的部分編寫代碼:
圖4 形位公差對話框
2.4外部數(shù)據(jù)庫的訪問
通常在Pro/E二次開發(fā)過程中,還需要與外界的數(shù)據(jù)庫相連接,來實(shí)現(xiàn)相應(yīng)的查詢功能,由于Microsoft Access數(shù)據(jù)庫具有使用性強(qiáng)、兼容性和通用性好等優(yōu)點(diǎn),因此采用Access數(shù)據(jù)庫來創(chuàng)建公差數(shù)據(jù)庫。在數(shù)據(jù)庫與Pro/TOOLKIT應(yīng)用程序之間的連接采用ADO(ActiveX Date Objects)方式。
ADO是一個面向?qū)ο蟮某绦蚪涌?,也是存取?shù)據(jù)源的COM組件的一部分,它提供了編程語言和數(shù)據(jù)訪問方式OLE DB,不過OLE DB更加接近底層。ADO繼承了早期微軟的數(shù)據(jù)訪問的對象層,包括RDO(Remote Data Objects)和DAO(Data Access Objects)。ADO庫包含三個基本接口對象∶_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。本文采用的是_ConnectionPtr接口對象進(jìn)行數(shù)據(jù)庫之間的連接,用該對象進(jìn)行對數(shù)據(jù)庫的關(guān)閉打開和創(chuàng)建數(shù)據(jù)集的動作等。在使用之前,把“stdafx. h”文件加到下面的代碼中:#import“c;program filescommon filessystemadomsado15.dll”re name_
namespace(“myado”)rename(“EOF”,”adoEOF”)主要是添加ADO系統(tǒng)所使用的相關(guān)組件及操作空間。
下面給出了部分連接實(shí)例程序代碼如下:
形位公差的標(biāo)注采用彈出式對話框的形式,用戶可以選擇相應(yīng)的形位公差進(jìn)行標(biāo)注。部分標(biāo)注的
所建立的對話框以及標(biāo)注的結(jié)果如圖5所示。
圖5 工程圖標(biāo)注示例圖
本文闡述了運(yùn)用Pro/TOOLKIT結(jié)合VC++的 MFC的可視化優(yōu)點(diǎn)實(shí)現(xiàn)了 Pro/E系統(tǒng)的二次開發(fā)——工程圖的國際化標(biāo)注。這是一款簡單易用且符合國際的通用化標(biāo)準(zhǔn)插件的開發(fā),最大限度地提高了Pro/E軟件的使用效率,縮短了產(chǎn)品的開發(fā)周期,促進(jìn)了CAD技術(shù)的發(fā)展。
[1]路強(qiáng),費(fèi)明浩,賈騰,等.基于Pro/TOOLKIT二次開發(fā)的二維工程圖標(biāo)注系統(tǒng)[J].拖拉機(jī)與農(nóng)用運(yùn)輸車,2008,35(6)∶101-103.
[2]王文波.Pro/EWildfire4.0二次開發(fā)實(shí)例解析[M].北京∶清華大學(xué)出版社,2010.
[3]李世國.Pro/TOOLKIT程序設(shè)計[M].北京∶機(jī)械工業(yè)出版社,2003.
[4]張繼春.Pro/E二次開發(fā)實(shí)用教程[M].北京∶北京大學(xué)出版社,2003.
[5]宋娥,李世國.Pro/E二次開發(fā)中的界面設(shè)計技術(shù)[J].機(jī)械設(shè)計與制造,2005.(5)∶56-58.
[6]衛(wèi)大為,李健康.Pro/E二次開發(fā)的機(jī)械零件參數(shù)化設(shè)計[J].機(jī)械制造與研究,2004.33(6)21-24.
TH391.7;TP391.9