【摘要】基于UG NX5.0,詳細(xì)闡述了UG與MFC的通信的方法。以長方體三維參數(shù)化設(shè)計(jì)調(diào)用MFC為例介紹了UG二次開發(fā)的一般過程以及如何在UG中調(diào)用MFC程序。此外,為其它UG開發(fā)提供了另一條途徑和參考。
【關(guān)鍵詞】UG二次開發(fā);UG/Open MenuScript;MFC;長方體三維參數(shù)化
UG軟件進(jìn)入中國市場以來,在我國得到了越來越廣泛的應(yīng)用,己成為我國工業(yè)界主要使用的大型CAD/CAE/CAM軟件之一。UG為制造行業(yè)產(chǎn)品開發(fā)的全過程提供解決方案,功能包括概念設(shè)計(jì)、工程設(shè)計(jì)、性能分析和制造。但是,為了滿足用戶的特殊需要,提高設(shè)計(jì)效率和質(zhì)量,必須對UG進(jìn)行二次開發(fā)。
1.UG二次開發(fā)簡介
UG二次開發(fā)模塊是為滿足用戶特殊需要而隨UG一起發(fā)布的,被稱為UG/Open。它為UG軟件的二次開發(fā)提供了許多函數(shù)和工具集,便于用戶進(jìn)行二次開發(fā)工作,利用該模塊可對UG系統(tǒng)進(jìn)行用戶化定制和開發(fā),滿足用戶的需求。UG/Open包括以下幾個(gè)部分:UG/Open GRIP、UG/Open API、UG/Open MenuScript、UG/Open UIStyler。
2.UG與MFC的通信
UG/Open應(yīng)用程序盡管從UG 15.0推出微機(jī)以來,一直采用Microsoft Visual C++作為編譯器,但是UG/Open API中沒直接提供對MFC的支持,所以在UG開發(fā)中還不能直接調(diào)用MFC。同目前流行的Windows應(yīng)用序開發(fā)工具相比,UG應(yīng)用程序界面的專用工具UIStyler中包含的控件較少,功能有限,使得在開發(fā)靈活性應(yīng)用時(shí)受到一定的局限,使用起來很不方便,有的功能甚至難以實(shí)現(xiàn)。目前,還沒有公開UG/Open API中調(diào)用Microsoft Fundament Class(MFC)的方法,所以無法使用MFC來編寫UG應(yīng)用程序的界面。為了讓程序支持MFC,必須對應(yīng)用程序結(jié)構(gòu)做出相應(yīng)的改變。
(1)在visual C++的應(yīng)用程序創(chuàng)建MFC AppWizard(dll)程序框架。
(2)在全局對象類theApp下面添加UG/Open函數(shù)入口ufusr,主要代碼如下:
MFC in UG.h源程序
#if !defined(AFX_MFCINUG_H__A2769751_B6D2_4F47_AA4D_141127CCB274__INCLUDED_)
#define AFX_MFCINUG_H__A2769751_B6D2_4F47_AA4D_141127CCB274__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#include \"resource.h\"
class CMFCinUGApp :public CWinApp
{
public:
CMFCinUGApp();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMFCinUGApp)
//}}AFX_VIRTUAL
//{{AFX_MSG(CMFCinUGApp)
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#endif
MFC in UG.cpp源程序
#include \"stdafx.h\"
#include \"MFC in UG.h\"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BEGIN_MESSAGE_MAP(CMFCinUGApp, CWinApp)
//{{AFX_MSG_MAP(CMFCinUGApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CMFCinUGApp::CMFCinUGApp()
{
// TODO:add construction code here,
// Place all significant initia-lization in InitInstance
}
CMFCinUGApp theApp;
#include
#include
#include
#include
#include
#include
extern \"C\" DllExport void ufusr( char *param,int *returnCode,int rlen )
{
int errorCode = UF_initialize();
if ( 0 == errorCode )
{
//實(shí)現(xiàn)所需功能的函數(shù)調(diào)用,如:
AfxMessageBox(\"I have realized how to call MFC in UG development!\");
errorCode = UF_terminate();
}
}
extern \"C\" int ufusr_ask_unload( void )
{
return( UF_UNLOAD_UG_TERMINATE );
}
(3)在Visual C++中編譯連接后生成動態(tài)鏈接文件(*.dll),打開UG,選擇執(zhí)行【NX Open】命令,在“Execute User Function”對話框中選擇要執(zhí)行的動態(tài)鏈接庫,運(yùn)行結(jié)果如圖。
3.設(shè)計(jì)實(shí)例
下面就以長方體三維參數(shù)化設(shè)計(jì)為例,闡述UG二次開發(fā)的一般過程及MFC在UG二次開發(fā)中的應(yīng)用。
(1)菜單、對話框的制作
首先,在自定義目錄下創(chuàng)建startup和ap-plication兩個(gè)文件夾,其中自定義的菜單文件就在
startup文件夾中。本例中自定義目錄為:E:\ug_para_design
然后,打開控制面板->系統(tǒng)中的高級選項(xiàng)卡,注冊環(huán)境變量,其中的變量名為UGII_USER_DIR,變量值為自定義目錄。如圖所示。
最后,在startup文件夾下建立菜單文件
VERSION 120
EDIT UG_GATEWAY_MAIN_MENUBAR
BEFORE UG_HELP
CASCADE_BUTTON three_dimensional_para_design
LABEL 三維參數(shù)化設(shè)計(jì)
END_OF_BEFORE
MENU three_dimensional_para_design
BUTTON block
LABEL 長方體三維參數(shù)化設(shè)計(jì)
ACTIONS block_act
END_OF_MENU
其中block_act是在UG/Open API程序中注冊的函數(shù)名。
(2)利用VC建立長方體三維參數(shù)設(shè)計(jì)與數(shù)據(jù)庫鏈接
根據(jù)MFC程序框架,建立MFC DLL。把長方體設(shè)計(jì)所用的計(jì)算公式、數(shù)據(jù)等以程序的形式寫入DLL中。同時(shí),把所計(jì)算所得結(jié)果存入到數(shù)據(jù)庫中。在DLL中,利用Access完成對數(shù)據(jù)庫中數(shù)據(jù)的管理。根據(jù)上述方法,完成UG中對MFC DLL程序的調(diào)用,結(jié)果如圖所示:
4.結(jié)束語
本文介紹了在UG平臺上進(jìn)行二次開發(fā)的一般過程和如何把MFC成功的融入到UG二次開發(fā)當(dāng)中的方法,并以長方體參數(shù)設(shè)計(jì)為例詳細(xì)敘述了具體實(shí)現(xiàn),可為其它方面的UG二次開發(fā)提供參考和借鑒。
參考文獻(xiàn)
[1]董正衛(wèi),田立中,付宜利,編著.UG/OPEN API編程基礎(chǔ)[M].清華大學(xué)出版社,2002,8.
[2]任哲等,編著.MFC Windows應(yīng)用程序設(shè)計(jì)[M].清華大學(xué)出版社,2004,6.
作者簡介:張超,碩士研究生,現(xiàn)就讀于華北電力大學(xué)(保定),研究方向:數(shù)字化設(shè)計(jì)與制造。