UG是一个当今世界上最先进,紧密集成的CAD/CAM/CAE高端软件,得到了广泛应用。然而,UG只是一个面向通用产品的平台,没有把用户的特殊需要和设计经验集成到系统中,为此,有必要利用UG的二次开发工具对具体行业(产品)进行二次开发,以提高设计效率,缩短设计周期。特别在模具行业,相关的软件较少,产品结构复杂,设计要求高,部分零部件已形成系列化,开发出专用的冲模CAD系统,以适应系列化产品的设计,大大提高三维冲压模设计效率,为并行化设计打下基础。
一、UG二次开发的实现途径
UG/Open是一系列UG开发工具的总称,主要包括UG/OpenAPI、UG/OpenMenuScript、UG/OpenGRIP、UG/OpenUIStyle、UG/OpenC++、宏命令(Macro)等。主要介绍本文用到的以下几个模块。
1、用户菜单脚本UG/OpenMenuScript
UG/OpenMenuScript提供一套用于定义UG菜单的脚本语言,UG的菜单也是用该语言写成的,开发者使用该脚本语言可以修改UG界面的菜单结构,如添加、删除和定制菜单,以及改变菜单的显示文本或响应行为(actions)等。菜单脚本文件的扩展名为*.men(文件).可以用微软的记事本来制作,最后将扩展名由txt改为men即可。使用前,用记事本打开UG安装目录下的UGII\ugii_env.dat文件,找到#UGII_USER_DIR=${HOME}行,去掉#和${HOME},在=号后输入自己的目录,本论文为C:\GEAR,在此目录下建立两个文件夹,取名为startup和application。其中*.men文件必须位于"用户目录\startup目录"中,UG启动后会自动加载。
本文部分菜单脚本编辑语言主要的语法格式如下:
VERSION120//兼容Ugv12的菜单脚本
EDITUG_GATEWAY_MAIN_MENUBAR//编辑UG主菜单
BEFOREUG_HELP//第一级菜单位于Help菜单之前
CASCADE_BUTTONLAUNCH_CASCADE//菜单的ID
LABEL宁文波-冲模设计//定义主菜单的标题
END_OF_BEFORE//结束第一级菜单的编辑
MENULAUNCH_CASCADE//编辑第二级菜单
BUTTONmj//下拉菜单的ID
LABEL模架设计(&J)//定义菜单的标题
BITMAPC:\tm.bmp//加载位图
ACTIONSmojia.dlg//菜单的相应行为
SEPARATOR//菜单中画分割线......
END_OF_MENU//结束菜单的编辑
2、UG/OpenUIStyle对话框技术
和VisualC++对话框设计相似,UIStyler包含对话框的各种控件,即UIObjects对象,如Label、ActionButton、Bitmap、Integer、Real、String、RadioBox、ScaleInteger(Real)StrolledWindow、SelectionBox、ToggleButton、SelectList等,可以随意对它们进行组合并编辑确定其位置。每一UIObjects对象具有一定的属性、选择性及回调函数,这些性质均应在生成UIStyler对话框文件之前确定。在保存UIStyler对话框时共生成三个文件:*.dlg、*_template.c、*.h。其中*.dlg是UIStyle对话框界面文件,非ASCII格式,封装了对话框的图形界面;*_template.c、*.h分别是UIStyler对话框C语言模板文件和头文件。用户的主要工作是修改*_template.c模板文件并在其中添加用户代码,确定UIStyler对话框被调用的形式及其所实现的功能。这些工作都在VisualC++6.0中完成,最终和*.h编译链接生成可调用的*.DLL文件。
3、UG/OpenAPI
UG/OpenAPI又称userfunction,是一个允许程序访问并改变UG对象模型的程序集。UG/OpenAPI封装了近2000个UG操作的函数,它可以对UG的图形终端、文件管理系统和数据库进行操作,几乎所有能在UG界面上的操作都可以用UG/OpenAPI函数实现。UG/OpenAPI程序分为内部程序(InternalUG/OpenAPI程序)和外部程序(ExternalUG/OpenAPI程序)。内部程序必须在UG环境下运行,根据所编制的程序进行交互操作。外部程序在操作系统中执行,不进入到UG环境中,程序执行过程不能进行交互操作。本文主要用到了内部程序,其格式一般为:
#include<uf.h>//包含UG/OpenAPI公共类型和函数定义 //包含额外的头文件
voidufusr(char*param,int*retcod,intparm_len)//程序的入口函数
{
//定义变量
UF_initialize();//访问许可
body//应用主体
UF_terminate();//返回许可
}
4、UG/OpenGRIP
UG/OpenGRIP是UG提供的二次开发语言模块,也具有外部高级开发语言的接口。GRIP是UG的内嵌语言,能够实现强大的图形绘制、装配、工程图的生成和一定的文件管理功能,主要进行UG的功能调用。GRIP程序一般是在UG平台下编制的,有独特的开发工具、编译链接过程、程序语法和文件格式,可以与UG/OpenAPI相互调用。
二、应用实例
以模架为例,利用UIStyler制作程序中使用的对话框(图2-1),并在VC++6.0中编程,编制程序的目的是生成动态链接库文件*dll。利用UG/OpenMenuScript生成用户菜单。(图2-2)。
对话框编辑完成后以名称mojia保存,生成三个用户文件:界面文件mojia.dlg、头文件mojia.h、模板文件mojia_template.c。把mojia_template.c调入VC++6.0,对程序链接编译后,只能生成一个空的*.dll文件。要实现用户的特定功能,需要在程序中添加相应代码。
部分代码如下:
intUB_apply_cb(intdialog_id,
void*client_data,
UF_STYLER_item_value_type_p_tcallback_data)
{
UF_STYLER_item_value_type_tdata;
intresponse=0;
interror_code=0;
chargrip_exe[1024];
char*program_name="mojia.grx";
doublepassnumber[3];
/*MakesureUserFunctionisavailable.*/
if(UF_initialize()!=0)
return(UF_UI_CB_CONTINUE_DIALOG);
/*----Enteryourcallbackcodehere-----*/
data.item_id="L";
data.item_attr=UF_STYLER_VALUE;
UF_STYLER_ask_value(dialog_id,&data);
passnumber[0]=data.value.real;
......
该程序调用mojia.grx的绘图程序,并把用户输入对话框内的数据传递给GRIP,其部分代码如下(在NXOPENGrip编译连接后的代码,图2-3):
程序运行结果如图2-4。注意*dll要放在startup文件下,*grx*dlg要放在application文件下。程序要在UG基础环境中运行,否则会出现找不到实体的提示。
三、结论和展望
本文利用UG二次开发功能实现冲模部件的参数化三维设计,为加快模具建模速度、节省设计时间方面将会取得一定成效。
如果您有机床行业、企业相关新闻稿件发表,或进行资讯合作,欢迎联系本网编辑部, 邮箱:skjcsc@vip.sina.com