對于Pro/ENGINEER的二次開發(fā)隨著相關(guān)的軟件版本的更新,涉及到了開發(fā)工具種類和相關(guān)設(shè)置以及其不同版本與Pro/ENGINEER的相互兼容問題。就開發(fā)工具VC而言,對于Pro/ENGINEER 2000i、2001、Wildfire 2.0只能用VC++6.0,而Pro/ENGINEER 3.0只能用VC.NET 2003,最新版本的Pro/ENGINEER 4.0只能用VC 2005。
就開發(fā)工具種類而言,明顯的變化是在Pro/ENGINEER 4.0提供了VB的支持,包括VB 2005.net以及類似于word、excel的VBA,并且函數(shù)比較全,而且完全基于類的方法。對于Pro/TOOLKIT,它是PTC提供用于對Pro/ENGINEER進(jìn)行二次開發(fā)的有效工具。Pro/TOOLKIT提供了大量的C語言函數(shù),幫助我們利用C語言編程來增加Pro/ENGINEER的功能。
本文應(yīng)用VC 2005結(jié)合Pro/ENGINEER 4.0的功能模塊Pro/TOOLKIT進(jìn)行二次開發(fā),通過給Pro/ENGINEER中添加菜單來訪問外部刀具庫,對數(shù)控加工過程中刀具參數(shù)實現(xiàn)文件化操作,解決Pro/ENGINEER在NC序列設(shè)置刀具的設(shè)定中需要逐個輸入刀具參數(shù)的問題。
一、總體方案
Pro/TOOLKIT并不提供對MFC的支持,利用MFC強(qiáng)大功能實現(xiàn)對話框的開發(fā)。其與刀具數(shù)據(jù)庫的連接必須運(yùn)用通信方式實現(xiàn),應(yīng)用程序可使用DLL動態(tài)鏈接庫文件實現(xiàn)。
采用VC 2005編寫動態(tài)連接庫訪問數(shù)據(jù)庫,最后編寫與Pro/TOOLKIT的接口,然后在Pro/ENGINEER系統(tǒng)中加載Pro/TOOLKIT應(yīng)用程序。
利用VC 2005提供的MFC開發(fā)人機(jī)交互界面,它能向用戶提供圖形與文字共存的可視化環(huán)境,使操作自然、簡便和快速,并且設(shè)計、調(diào)試及修改都比較方便,技術(shù)也比較成熟。
這里采用了Access數(shù)據(jù)庫作為刀具庫的數(shù)據(jù)源,以O(shè)DBC作為接口,數(shù)據(jù)庫的調(diào)用、編寫簡單,在VC 2005中可直接調(diào)用。
二、程序的編制
1.建立刀具庫并設(shè)置數(shù)據(jù)源
在Pro/NC加工中,主要加工類型為銑削和車削,還能進(jìn)行線切割。以銑削為例,對工件進(jìn)行曲面銑削中采用的端銑刀刀具設(shè)定對話框為例,如圖1所示。

由此,我們可以根據(jù)對話框界面所需輸入?yún)?shù)的要求確定數(shù)據(jù)庫中一個表格的字段個數(shù),如圖2所示。

根據(jù)常用的端銑刀數(shù)據(jù)建立數(shù)據(jù)庫表,數(shù)據(jù)庫名稱為銑削刀具庫.mdb。然后對數(shù)據(jù)源進(jìn)行設(shè)定:在Windows系統(tǒng)中的控制面板→管理工具→數(shù)據(jù)源選項(ODBC)→用戶DSN,設(shè)置添加數(shù)據(jù)源驅(qū)動程序,Driver do Microsoft Access,數(shù)據(jù)源名稱為milling,最后指定到銑削刀具庫的端銑刀數(shù)據(jù)表。
2.MFC程序1sjk.dll的編寫
(1)添加刀具庫類CDaoju,建立MFC數(shù)據(jù)庫接口在VC 2005開發(fā)環(huán)境中通過菜單項目→添加→MFC ODBC,使用者來新建一個基于CRecordset的類(CDaoju)映射于已經(jīng)建好的數(shù)據(jù)庫表,即選擇前面已注冊好的ODBC數(shù)據(jù)源車刀,再選擇表(para),完成后程序自動加入代碼,從而獲得了可以應(yīng)用的表格字段。
(2)刀具庫顯示對話框的設(shè)計
1)創(chuàng)建對話框資源:在VC 2005開發(fā)環(huán)境中通過菜單項目→添加→資源→Dialog→新建生成新的對話框。
2)在對話框上添加一個列表控件,右擊列表控件設(shè)定其屬性中外觀,查看(View)生成報告(Report)。
3)雙擊對話框創(chuàng)建基于該對話框的類(cshow),自動生成CDialog派生類定義的頭文件和相應(yīng)的實現(xiàn)文件。
4)雙擊列表控件,給列表控件添加成員變量m_mcutter。
5)右擊基于對話框的類,點(diǎn)擊添加→函數(shù),給出相應(yīng)的對話框初始函數(shù)OnInitDialog()。
BOOL CDBDlg::OnInitDialog()
{
…
Chuangjiankongbiao(); //建立表
…
str = m _mcut.
GetDefaultConnect(); //得到字符串
“ODBC;DSN=Milling”
str+=m_mcut.
GetDefaultSQL(); //得到總的字符為
ODBC;DSN=Milling[端銑刀]
SetWindowText(str); //設(shè)置
窗體的名稱
create=true;
Huodeshuju();
return TRUE;
}
6)在類視圖中選中CDBDlg,右擊添加函數(shù)Chuangjiankongbiao()和函數(shù)Huodeshuju()。
void CDBDlg::Chuangjiankongbiao()
{
m_mcutter.InsertColumn(0,”
刀具類型”,LVCFMT_CENTER,
138,0); //插入一列
…
m_mcutter.InsertColumn(8,”
長度”,LVCFMT_CENTER,66,
0);
}
void CDBDlg::Huodeshuju()
{
…
{
pd.iItem=k;
pd.iSubItem=0;
pd.pszText=m_mcut.m_TOOL_
TYPE.LockBuffer();
m_mcutter.InsertItem(&pd);
…
pd.iSubItem=8;
printf(pd.pszText,"%10.3f",
m_mcut.m_Length);
m_mcutter.SetItem(&pd);
m_mcut.MoveNext();
}
}
7)在對話框中,使列表控件在處于選中右擊,給該控件添加右鍵單擊消息NM_RCLICK,
應(yīng)給出相應(yīng)的消息函數(shù),功能是彈出輸出數(shù)據(jù)的命令菜單,如圖3所示。

下面是消息函數(shù)主要代碼。
void CDBDlg::OnNMRcli
ckList1(NMHDR*pNMHDR,
LRESULT*pResult)
{
currentselect=m_mcutter.
GetHotItem(); //獲得當(dāng)前擊活項的索引值
if(currentselect==-1) return;
CMenu me;
CPoint po;
GetCursorPos(&po); //獲得鼠標(biāo)的屏幕坐標(biāo)
me.LoadMenu(IDR_MENU1); //載入菜單
CMenu*pr=me.GetSubMenu(0); //獲取指向彈出菜單的指針,位置值開始為0;
pr->TrackPopupMenu(TPM_
LEFTALIGN|TPM_RIGHTBUTTON,
po.x,po.y,this,NULL);
*pResult=0;
}
8)插入一個菜單資源,單擊編輯區(qū)菜單區(qū)域,輸入“數(shù)據(jù)輸出”。在其下添加1個子菜單,標(biāo)明為:數(shù)據(jù)輸出,如圖4所示。

右擊下面的子菜單,在彈出的菜單中選添加事件處理程序,在彈出的對話框中消息類型選擇COMMAND,對應(yīng)給出相應(yīng)的消息函數(shù)。用此實現(xiàn)右擊彈出的菜單中的數(shù)據(jù)輸出命令,如圖5所示。

下面是消息函數(shù)主要代碼。
void CDBDlg::OnIdOutput()
{
…
filepath.m_ofn.lpstrFilter="*.