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

由此,我們可以根據對話框界面所需輸入參數的要求確定數據庫中一個表格的字段個數,如圖2所示。

根據常用的端銑刀數據建立數據庫表,數據庫名稱為銑削刀具庫.mdb。然后對數據源進行設定:在Windows系統中的控制面板→管理工具→數據源選項(ODBC)→用戶DSN,設置添加數據源驅動程序,Driver do Microsoft Access,數據源名稱為milling,最后指定到銑削刀具庫的端銑刀數據表。
2.MFC程序1sjk.dll的編寫
(1)添加刀具庫類CDaoju,建立MFC數據庫接口在VC 2005開發環境中通過菜單項目→添加→MFC ODBC,使用者來新建一個基于CRecordset的類(CDaoju)映射于已經建好的數據庫表,即選擇前面已注冊好的ODBC數據源車刀,再選擇表(para),完成后程序自動加入代碼,從而獲得了可以應用的表格字段。
(2)刀具庫顯示對話框的設計
1)創建對話框資源:在VC 2005開發環境中通過菜單項目→添加→資源→Dialog→新建生成新的對話框。
2)在對話框上添加一個列表控件,右擊列表控件設定其屬性中外觀,查看(View)生成報告(Report)。
3)雙擊對話框創建基于該對話框的類(cshow),自動生成CDialog派生類定義的頭文件和相應的實現文件。
4)雙擊列表控件,給列表控件添加成員變量m_mcutter。
5)右擊基于對話框的類,點擊添加→函數,給出相應的對話框初始函數OnInitDialog()。
BOOL CDBDlg::OnInitDialog()
{
…
Chuangjiankongbiao(); //建立表
…
str = m _mcut.
GetDefaultConnect(); //得到字符串
“ODBC;DSN=Milling”
str+=m_mcut.
GetDefaultSQL(); //得到總的字符為
ODBC;DSN=Milling[端銑刀]
SetWindowText(str); //設置
窗體的名稱
create=true;
Huodeshuju();
return TRUE;
}
6)在類視圖中選中CDBDlg,右擊添加函數Chuangjiankongbiao()和函數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,
應給出相應的消息函數,功能是彈出輸出數據的命令菜單,如圖3所示。

下面是消息函數主要代碼。
void CDBDlg::OnNMRcli
ckList1(NMHDR*pNMHDR,
LRESULT*pResult)
{
currentselect=m_mcutter.
GetHotItem(); //獲得當前擊活項的索引值
if(currentselect==-1) return;
CMenu me;
CPoint po;
GetCursorPos(&po); //獲得鼠標的屏幕坐標
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)插入一個菜單資源,單擊編輯區菜單區域,輸入“數據輸出”。在其下添加1個子菜單,標明為:數據輸出,如圖4所示。

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

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