|
(广西大学计算机与电子信息学院,南宁 530004) 摘- l+ m; ~9 M1 Q
要:UG软件是美国EDS公司开发的一套集CAD/CAM/CAE一体的高端软件。UG是一个通用软件,用户必须在此基础上进行二次开发,才能满足专门模具设计的需要,提高设计效率。本文探讨UG二次开发技术,重点研究通过VC编程调用UG/OPEN API函数设计模具的技术。# ^3 t2 n5 ~/ m0 B' I3 {, x) z" N
关键词:UG
S! N' ^+ X! u, S* \2 g二次开发
/ p$ U$ g# K6 d" [7 GUG/OPEN
9 c$ R2 Y8 ^1 P 9 S9 n$ u( e+ V+ Z) |+ {) o: z
1.+ P! c* U% [5 L. p, ?
引言
( j) R9 Q' ]+ lUnigraphics(简称UG)在CAD/CAM上表现出了强大的功能,但UG为通用支撑软件系统,仅具有CAD/CAM的基本功能,没有提供专用产品所需要的完整计算机辅助设计/制造功能.由于机械产品的千变万化,需要针对具体对象在选用的CAM软件平台上进行二次开发,来设计出界面友好、功能强大和使用方便的专用产品的CAD/CAM系统.本文介绍UG/OPEN UIStyler、UG/OPEN GRIP和UG/OPEN API的二次开发技术。
& ` B$ ~( H8 E1 Y' {% u4 tUG/Open二次开发模块为UG软件的二次开发工具集,便于用户进行二次开发工作,利用该模块可对UG系统进行用户化剪裁和开发,满足用户的开发需求。UG/Open包括以下几个部分:UG/Open Menuscript开发工具,对UG软件操作界面进行用户化开发,无须编程即可对UG标准菜单进行添加、重组、剪裁或在UG软件中集成用户自己开发的软件功能;UG/Open UIStyle开发工具是一个可视化编辑器,用于创建类似UG的交互界面,利用该工具,用户可为UG/Open应用程序开发独立于硬件平台的交互界面;UG/Open API开发工具,提供UG软件直接编程接口,支持C、C++、Fortran和Java等主要高级语言;UG/Open GRIP开发工具是一个类似APT的UG内部开发语言,利用该工具用户可生成NC自动化或自动建模等用户的特殊应用。
* f" y' E3 [- u1 }2 i$ r. C2 UG/OPEN
/ M; u _* a2 |/ E, c* aMenuScript
) }) l7 y) X( Q- s/ a
. ?! U. b# v" O( O* c- v4 P3 {用这一工具可以实现用户化的菜单。UG/OPEN8 G8 F: g5 m$ g; B9 I
MenuScript支持UG主菜单和快速弹出式菜单的设计和修改,通过它可以改变UG菜单的布局。添加新的菜单项以执行用户GRIP、API二次开发程序、User Tools文件及操作系统命令等。应用UG/OPEN
2 f( L& ]2 H+ s; a( o: H# XMenuScript编程有两种方法可以实现菜单用户化:
. V( m+ ?7 ^1 n; U: Z+ C" A) I
* n$ Z6 Q/ ^! s' d+ `% A- _" }a)、添加菜单文件
, j& z# x, j" \) s/ V" X+ x0 Q% T开发人员添加菜单文件到相应的菜单目录下,这些菜单文件是经过用户编辑的,符合自己要求的菜单文件。这是一种比较好的方法、8 n* o' U, f/ K; R, ]
+ A m2 U7 d, h7 U5 s, v6 X* E6 C
b)编辑标准菜单文件8 e; r3 a% ]- S' X6 x0 d
开发者编辑存在的标准菜单文件。这种办法就会改变UG原来的界面,不能恢复。开发者可以通过文本编辑器,例如记事本编辑UG菜单文件。UG/Open API提供UG/Open API程序与UG/OPEN8 P0 P" a- M/ m$ J% t' Q
MenuScript. [6 H! z. f* z" F
程序的接口函数。- t3 J+ H! u" b1 E5 a
8 C& K( Y+ W& Z; K& q! N% ~+ ^33 \9 R- |1 i- S V
UG/OPEN UIStyler4 L4 d7 G" r8 {! H: l! \
UIStyler是开发UG对话框的可视化工具,生成的对话框能与UG集成,让用户更方便、更高效地与UG进行交互操作。利用这个工具可以避免复杂的图形用户接口GUI的编程,直接将对话框中的基本控件组合生成功能不同的对话框。
% p* C, w, x% S开发人员进入UG,点击Aplication→UserInterfaceStyler就可以进入对话框设计的界面。该界面包括一个工具条和三个窗口:对象浏览窗口、资源编辑器窗口以及设计对话框窗口。应用工具条能够快速点击图标,在设计对话框上添加删除控件,进行对话框界面的设计;对象浏览器窗口显示对话框上所有控件的信息,选中某一控件即可在资源编辑器窗口中进行相应的操作;资源编辑器窗口用于设置修改控件的属性、消息等操作;设计对话框窗口用来显示对话框的界面。
2 x) L- ^! h( f6 [2 J当界面设计完成后,保存UIStyler编写的对话框时生成3个文件: *.dlg、*_template.c及 *.h文件。其中, *.dlg是保存对话框图形界面的文件; .h文件是UIStyler对话框C语言的头文件,包括对话框及其控件的标识符和函数原型的申明;*_template.c是UIStyler对话框C语言的模板文件,包括各种定义和命令。用户的主要工作是修改 *_template.c模板文件并在其中添加用户代码,以确定UIStyler对话框被调用的形式及其所能实现的功能。对模板文件的修改工作可在VC中完成,然后和 .h编译连接生成 .DLL文件。
' o# e8 J; p& B- j) T应用UIStyler这一工具可以使开发人员方便、快速地设计出与UG界面风格一致的对话框,避免其他复杂的编程。而且可以和用其他开发工具开发出的结果进行集成。UG/Open UIStyler工具和UG/Open Menu Script工具一样,都只具有某一方面的功能:UG/Open UIStyler用于对话框的开发, UG/Open Menu Script用于菜单的开发。" h4 h+ j# Z) x* c) V
& z: g8 s) N4 b2 ^! ^% p4% D: A8 [8 G1 D; j
UG/OPEN GRIP
; h! ~- O7 V, ]GRIP(Graphics Interactive Programming)是一种专用的图形交互编程语言,开发者可以用GRIP编程的方法自动实现在UG下进行的绝大部分操作.GRIP命令很像英语单词,语法与BASIC和FORTRAN相似,有某些情况下对于一些高级操作,用GRIP编程的方法比用UG交互的方法更有效,在UG交互环境下可以实现的功能用GRIP几乎全都可以实现.UG提供了一个名叫UG/Open GRIP的GRIP语言编辑器,用这个工具可以编辑、修改、编译、连接程序.GRIP语言与一般的通用语言一样,有其自身的语法结构,程序结构,内部函数,以及与其他通用语言程序相互调用的接口。一个GRIP语句是由一个或几个GRIP命令组成,GRIP命令是GRIP语言的基本组成部分。GRIP命令有三种表示格式:A)陈述格式。主要用于生成和编辑实体。b)GPA符号格式。GPA是全局参数存取(Global Parameter Access)的缩写,用于访问UG系统中各种对象的状态和参数。c)EDA符号格式。EDA是实体数据存取(Entity Data Access)的缩写,用于访问UG数据库,能够访问各种对象的功能性数据。例如在属性、绘图和尺寸标注以及几何体等领域与UG进行交互操作时,其参数可用EDA格式的命令取得。; n0 j# r5 z$ N+ `: \# S
GRIP编程语言是面向工程师的语言,具有简单、易学、易用的特点,但是所编写的程序长、复杂,要考虑程序的各个细节问题。因此,GRIP语言常用于开发一些规模比较小的程序。5 j3 h( F: L) z& U6 r* T
0 A# P4 o1 Q: e
5. S/ G. L; }! ]6 F; i& a# D7 N
UG/OPEN API
, j& {# l3 N# q. X0 j) u5 x' [& IUG/Open API又称User Function,是一个允许程序访问并改变UG对象模型的程序集。UG/OpenAPI封装了近2000个UG操作的函数,
) C8 X8 h5 n% C7 L( {2 c通过它可以在C程序和C++程序中以库函数的形式调用UG内部的近2000个操作,它可以对UG的图形终端、文件管理系统和数据库进行操作,几乎所有能在UG界面上的操作都可以用UG/Open API函数实现。) J; x$ r; p% z0 ?( N- y# A
UG/Open API程序根据编译连接的情况可以运行在两种不同的环境中,Internal与External. External类型以.exe方式可以直接在操作系统下运行,独立于UG系统,该类型无法显示图形与用户交互,但可以打印和生成计算机图形元文件(CGM);Internal类型只能运行在UG环境下.该程序以 .dll (动态链接库)的方式被调到UG的进程空间中,一旦调进便常驻内存,该类型与External类型相比他的优点是可以连接的更快且程序更小并能与用户交互. Internal类型程序的运行可以从UG图形界面里来调用,另外可以从UG/Open Menu Script、User Exits、User Tools和UG/Open GRIP里调用.' U7 K( Y/ p0 t6 z" X9 E; Y4 b9 h
UG/Open API程序使用的是C或C++编程语言。基于Windows NT操作系统的UG软件的开发可以在VC++6 0环境下进行。在VC环境中建立一个UG的二次开发工程有两种方法。其一是利用UG/Open AppWizard这个向导来建立基本的框架:其二是在VC中手工建立一个UG/Open API的工程。第一种方法开发人员只要按照向导一步一步执行下去就可以完成这个工程的基本框架。相对于第一种方法,第二种方法就烦琐得多,它必须在VC中人为配置工程的各种设置,才能建立起UG软件和VC的连接。所以最好使用UG/OpenAppWizard来建立二次开发工程。$ f( h; C* t$ A f! A, M
UG/Open API程序的运行可以在这几种环境下运行:a)VC环境。在这种环境下内部、外部程序均可以执行。b)UG界面。这种环境只能执行内部程序。程序的执行是程序通过VC++编译连接后,产生一个 DLL文件,然后进入UG,执行这个 DLL文件。c)UG/OpenGRIP程序。这是通过GRIP程序来调用UG/Open API程序。由于编程是在VC中进行,所以可以充分发挥VC的强大功能和丰富的编程资源,也可以利用企业原有的C语言代码资源,将其集成到UG中。用UG/Open API函数进行二次开发的优点是该工具功能比较强大,能够实现UG的绝大部分操作,易于进行交互操作。由于是调用UG封装的API函数,程序的出错率比较低;缺点是掌握UG/Open API函数的运用比较困难,特别要注意参数的类型和传递形式。3 o. ~- s' a$ p. O& h
/*下面三个为UG/OPEN自己的头文件,是最基本的头文件,这个由向导自动添加,针对不同的开发,加入不同的头文件,也就是不同的API 函数库*/
; D+ d _4 |7 G% Z: w# [#include <uf.h> 4 O2 g- t7 B9 u& @# J6 `+ X0 m/ y
#include <uf_exit.h> * O7 _3 Z: x2 h& ~, c: n
#include <uf_ui.h> * |0 e! W/ s; J% Y+ r: l
! g9 ~" ?5 H, p4 \$ H7 f0 J
#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
+ |6 M; f/ Z. ]6 z& k( i# include <strstream>
0 T5 ]9 J2 L$ ?: ^2 I& P; ? using std:strstream; / r! E7 _3 y! C( x
using std::endl; ) H7 j k7 u# _
using std::ends;
4 G+ P/ n1 V. v9 s+ q#else
- L% r: v+ o! E4 v# c4 A# include <strstream.h> 1 ^) [. j9 D* g& e/ A, k
#endif
$ h; Y+ V# R0 `2 p( J#include <iostream.h>
, b6 _8 C' K& b2 ^& J+ P, Y#include "hello.h" $ V _7 c+ M4 t( U
extern "C" DllExport void ufsta( char *param, int *returnCode, int rlen ) % L0 E. ]) ~+ y* p8 @& n3 ~3 ~$ j0 k
{
4 i! W7 N* Y$ r( t /* Initialize the API environment */ V( e0 ^0 I( b
int errorCode = UF_initialize(); /////初始化UG环境
z# N) n4 k( v% r0 L# y. s' B0 S1 u. T# y& i) N- V
6 F( g# y' V6 Q G! F3 x2 s if ( 0 == errorCode )
1 x" W0 g2 ?* T5 X {
% M2 v1 Y$ h5 |* q% S! [ /* TODO: Add your application code here */ ! q1 {( D5 Z Q1 n
$ u& }1 D( B+ T, _
/*添加的UG OPEN API函数,也可在此添加自定义函数,然后在入口函数外定义,注意必须设定好VC中的开发环境 */ 1 v W4 S9 T) O8 A
uc1601("hello world!",1); $ {4 c5 i9 [" _/ }: \ v* W
) c( K# ~8 Y4 A2 J- P /* Terminate the API environment */
: D! v* N) ?- c+ o* U4 k errorCode = UF_terminate(); ////退出UG环境7 P, b/ [$ U- Q* M, p
! I. s/ ], G7 w* l) ^- K; K } 5 R9 [8 `4 M% |7 p& s4 p7 L
# s( {( m7 e# f: D, U3 F
/* Print out any error messages */ ; X+ s( w- i5 c' O7 R3 p
PrintErrorMessage( errorCode ); - b2 u' r( G0 Q! I3 R( S4 F$ I
}
# v Z! O/ u0 W U$ g程序的过程如下:
$ r7 k7 i9 [$ {9 i6 Q) o' z3 ^, e8 x- d: T( ?1 UF_initialize() ;
2 [7 U1 N0 c: J, t4 m! ^" F& L2用 UF_ASSEM_ask_work_part()和 UF_ASSEM_ask_root_part_occ( old_tag )确定当前工作零件是否为装配文件。 9 [8 t( }* Q5 T* _$ i* S: X. O
3用UF_UI_select_single(…….)选择零件;opts的scope设为 UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY。 v( ?4 ^6 b1 J8 ]. {1 c; { {5 h" \- }
4 用uc1608输入直径、X和Y值;
5 ~1 d6 w1 D/ B8 S, l5用UF_MODL_create_cyl1()创建一个圆柱体,用 UF_MODL_ask_feat_body()得到feature的ID;4 n* x( D+ |# Y' p/ g- H9 @
6 用UF_ASSEM_ask_part_occurrence( )得到part的原型。
! c0 o5 F- \5 f用UF_ASSEM_ask_prototype_of_occ( )求part的tag和物体的tag;
4 h0 Z, v: U; }+ a' f7 用UF_MODL_operations求交;
/ u0 j* J% ~; W, _) D9 P# h8 用UF_terminate() 结束; 9 ^6 S( u6 ]# ^7 v( v4 S6 i# w
尺寸可以在drawing中生成,也可以在model view生成,在关draft的尺寸标注,首先是几个参数设置和获取的函数。 UF_DRF_ask_object_preferences UF_DRF_ask_preferences UF_DRF_set_object_preferences UF_DRF_set_preferences q: @5 n+ A8 K5 E7 d! j! |
常用的函数包括: UF_DRF_create_horizontal_dim UF_DRF_init_object_structure UF_DRF_create_vertical_dim Uc5540 Create a Note UF_DRF_create_label
* P: ?5 i9 X# d% l1 o+ b4 l4 I将程序编译好,利用UG FILE->Execute UG/OPEN->user function,运行刚才编译通过的DLL文件,就可看到结果了。
! o' a ~- g3 MUG进行二次开发后用户界面如图示:用户只需输入参数,系统即可自动调用数据库生成复杂的图像。
" R3 f4 e* ^- T- t1 E
: a# W/ X8 j% C; v6 结束语
9 _0 W8 J$ o; B1 y& X开发人员根据用户使用的要求,综合利用这些开发工具,可以提高二次开发的效率,开发高质量的UG软件。作者用C语言编写了基于UG/OPEN API函数的程序,实现了模具的三维建模,而且具有连接数据库的功能。从而极大的方便了用户。另UG的界面更加友好、便捷。今后的研究方向是在UG二次开发引入智能机制实现特征识别。
: s0 c- i% c% S& ?+ y0 r, J, c7 t 7 u4 H/ _ Z, a. ]! \8 ^
/ Y2 v& q4 J" C( B% i) f# {. ]: ^$ K, l9 m$ P& B
参考文献9 A: O. i* L8 J; o
[1] UG CAD 快速入门指导.
& s& L& S0 [" p/ w+ P北京:清华大学出版社, 2002. j% A, O0 H' r. p1 B) S- ?- C. G; P" x
[2]王庆林.UG/OPEN GRIP实用编程基础. 北京:清华大学出版社, 2002.4 ]9 a0 L3 `) d- S2 p) n$ U- `
[3]: ^; c) j# ^5 D( T7 l8 Y
董正卫,田立中,付宜利.UG/OPEN API编程基础. 北京:清华大学出版社, 2002.8 M+ [# E% \9 E$ N2 ^" E
[4] EDS Unigraphics: User Function Programming Manual, MU2065,1995,1,2,3. e. C" }' f6 w' J' J# m, O% x
[5] UG/OPEN API Programmer’s Guide. Unigraphics Solutions Inc.3 E5 V3 l) ~2 T6 q9 f
[6] UG V16 Documentation. Unigraphics Solution Inc.6 ]# _* N$ `+ Y5 h) w; `: Z) H
! r2 |4 E6 Z+ n4 ~*本文得到广西大学第二批创新学分实践项目的资助# Q5 o: g' z; z
作者简介:陆宇旻、韦克安、范菲菲、黄书楼、崔鑫、郑路,本科生;沈燕,高级工程师,指导教师 |
|