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