|
日志
5 t) k% i1 Q) H分享给好友复制网址隐藏签名档小字体 上一篇 下一篇 返回日志列表
" I& t. G+ ?( A, |" N微机平台的ug二次开发技巧 $ d9 E$ y0 F1 Z" F0 n
编辑 | 删除 | 权限设置 | 更多▼ 设置置顶/ V0 W, z7 B; `3 E5 O& v
; D& q1 _, S4 Y7 C+ W- H2 t推荐日志7 A) r9 D# Z j" Q! {1 l
; ?/ f- L/ H. y3 T转到私密记事本
2 G; d5 q" T# r7 y' g 严冰 发表于2009年05月27日 16:22 阅读(6) 评论(0) $ h6 O" V2 {1 K! a5 E4 ~: l! v
分类: 个人日记 权限: 公开
. W0 h& h) N. T! W 9 k2 M. A; i. M5 J: K6 c4 A$ j1 C: N
( }8 v7 m: ^0 K3 D
本文叙述如何在以Windows NT 4.0为操作系统的微机工作站上进行基于VC++6.0的UG(V14.0)二次开发,并对UG的开发模块和UG/Open API的编程方法作了介绍。
6 m+ R1 x! I* r2 x" O UG/Open通过一个开放的平台包含一系列的基于UG的应用软件的柔性集成。其目的是为了计算机集成应用,实现数据共享。它具有开放的体系结构。
8 L5 V) F" u5 q4 V UG/Open提供了一种能够完成下列工作的应用软件和工具:1)通过UG/Open API或UG/Open GRIP提供了与UG对象模型(UG Object Model)的接口;2)生成和管理用户自定义对象(User Defined Objects或Custom Objects),包括管理它们与UG对象的相关性;3)提供反映第三方应用软件的UG图形界面本地化方法;4)利用相关产品如IMAN ITK和Parasolid;5)利用和集成新的UG/Open技术并使之成为应用可能。! E! n/ O' }$ Y
UG/Open API是一个允许程序访问并影响UG对象模型的程序集,并同时提供一个UG所共容的编译和联接程序的方式。它支持C/C++语言,头文件(header files)支持ANSI C。在UG软件系统中相关的还有:UG/Open GRIP(/NC), UG/Open MenuScript, UG/Open IMAN ITK和Parasolid。
; H' M7 p: q" u) { UG/Open API执行许可证:开发运行一个UG/Open API程序需有UG/Open开发许可证和执行许可证,用户通过UF_initialize()来访问并通过UF_terminate()来返还这些许可证。; M* ^5 J @* E- A y
例程和UG/Open API头文件在用户应用平台ug安装目录下的ugopen目录里,Windows NT系统是%UGII_BASE_DIR%\ugopen,用户可以访问并利用这些程序和文件。/ ?6 Q$ h* c `4 C/ L* `
一、UG/Open API在Windows NT操作系统里的安装
~7 i& Z$ M( Y3 y) Z( [+ v 1.UG(V14.0)要求C编译器版本为Microsoft Visual C++V5.0以上,本文所述为VC++6.0版本。
; N7 @7 z2 ~% d" {/ L 2.定义环境变量(environment variables),定义方法:开始-设置-控制面板-系统,在“系统特性”框里点击“环境”栏,在“用户变量”里即可设置。
) L" Y3 |6 l& x% O$ [ 必需的环境变量:UGII_USERFCN,该变量指向UG/Open API库函数所在的目录。
+ w0 Y% [3 p! j8 `8 @ 其它的环境变量,1)变量:EXCEEDHOME,若欲使用包含UG/Open API Motif程序的prototypes的uf_ui_xt.h头文件时必须定义;2)变量:EXCEEDLIBS, 在uflink连接时指定应包含哪个eXceed/NT-XDK库函数时需定义;3)变量:INCLUDE,使C预处理器查找头文件(.h files);4)变量:LIB,它使C连接器查找对象库函数并输入库函数;5)变量:PATH,它使系统查找可执行文件、DLLs(Dynamic Link Library,动态连接库函数)和Scripts(命令表)。
9 A4 a7 g4 O7 s2 \: y1 @ 结论,在用户变量里定义:+ p0 M- A- _; ]$ R8 H6 U8 ?
UGII_USERFCN C:\ug\Eds140\Ugopen(也可在ugii_env文件中定义)
7 U; b' b5 L2 C+ a. I& K EXCEEDHOME C:.\ug\exceed
# r' ?! L8 Y( q' d: x' F EXCEEDLIBS C:\ug\exceed\xdk
# I) l7 o8 @6 C# @/ D" X7 ]- C INCLUDE D:\App\VisualStudio\VC98\Include9 y, U" \' C$ Q% w8 r
LIB C:\ug\Eds140\Ugopen\ugraf.lib; w' P& t$ `: r' ?; F& Q. }* [ w
C:\ug\Eds140\Ugopen\uguser.lib;
4 h4 o2 N8 F6 c D:\App\VisualStudio\VC98\Lib( t( _ v$ ]/ n8 d" c2 r' E
PATH C:\ug\Eds140\Ugii\og1;C:\ug\exceed;+ }2 n" L* E- [ x/ m
D:\App\VisualStudio\VC98\Bin;# F; ^6 P7 A- ?3 g3 ~
C:\ug\Eds140\Ugii
" ^/ A. \1 R) F8 Y: {( H0 q 2.在VC++里创建一个UG/Open API Project
- d9 ^$ r6 Q) @8 S (1)进入Microsoft Visual C++。
2 u3 K. ?! q$ ]0 v (2)创建Project: File→New→Projects,对于一个Internal UG/Open API程序选Win32 D-Link Library(对于一个Extermal UG/Open API程序选Win32 Console Application);并输入Project name。
4 L) X/ e0 `6 |4 ?+ Z/ j (3)Configure(配置)Project Settings% V# N) E3 X; z& i
选Project→Settings→Debug,“Category”栏是General,在“Executable for debug session”栏内输入:C:\ug\eds140\Ugii\ugraf.exe(这是为调试Internal UG/Open API program而设置的参量);在“Program arguments :”栏内输入ogl auto。
' u6 I$ f# B8 p2 @' R5 |8 f 选Project→Settings→C/C++,在“Category:”内选Code Generation;在“Use Run-Time library:”内选Multithreaded DLL。
4 p- B8 } u8 Y2 b 选Project→Settings→Link,“Category”栏是“general”;在“Output file name:”文本框内若无缺省输出文件名就指明;在“Object/library modules:”栏末加上ugraf.lib Xt.lib Xlibcon.lib Xlib.lib(程序为Internal UG/Open API with direct X/Motif references时)。(若程序为External UG/Open API 则加上Uguser.lib;若为Internal UG/Open API without direct X/Motif references则加上ugraf.lib)。6 ?2 [1 `8 z9 [# n2 }" b0 `
(4)Configure(配置)Tools Settings6 L8 [) {: v _
选Tools→Options- →Directories,在“show directories for:”内选Include files,在“Divectories:”内输入C:\ug\eds140\ugopen;若是Internal UG/Open API project,因要使用UG附带的支撑软件Hummingbird Exceed的include files,故再输入C:\ug\exceed\xdk\include。结论是依次输入:9 {; x6 h% f& H: b; f4 n8 m+ N2 R
C:\ug\Eds140\Ugopen2 c+ [. _5 `' R ~/ H. Z
C:\ug\exceed\xdk\include
, S& J+ x5 D, b$ G6 s- f) ]8 W! F0 W D:\App\VisualStudio\VC98\Include
* ~. _& R. b0 g4 M) x' |3 R+ r C:\ug\exceed\LIB
9 H5 B/ L9 A6 x/ N D:\App\VisualStudio\VC98\Mfc\include
; y+ O Q# Z8 M8 k' O+ f D:\App\VisualStudio\VC98\Atl\include
5 K: a0 F, s1 Q* R5 F" ^ C:\ug\Eds140\Ugii\ogl
9 T7 |! @0 e: o7 u C:\ug\Eds140\Ugii\xwi
x% g; j5 \1 S) F3 _1 z D:\App\VisualStudio\VintDev98\bin; W) M6 y! L2 U
选Tools→Options- →Directories,在“show directories for:”内选Library files,在“Directories:”内输入C:\ug\eds140\ugopen,若是Internal UG/Open API project,因要使用UG附带的支撑软件Hummingbird Exceed 的库函数,故再输入C:\ug\exceed\xdk\lib。结论是依次输入:
& L$ o2 r- g1 k6 Q1 u C:\ug\Eds140\Ugopen( h! z7 L7 a/ f- }
C:\ug\exceed\xdk\lib* i9 \% g2 i/ E9 W: j
D:\App\VisualStudio\VintDev98\bin
- v" J, k1 E8 p3 g. O$ [3 } C:\ug\exceed
/ p( ]& ~4 D1 {, [9 H% B: f7 a" d D:\App\VisualStudio\VC98\Lib D:\App\VisualStudio\VC98\Mfc\lib
! b! c0 t2 F9 H0 j! K1 C C:\ug\Eds140\Ugii
1 q4 T" y0 M/ `" g( b C:\ug\exceed\LIB
7 p5 S$ l2 Q/ q u% l (5)Add Files to Project9 p1 C% Y, W. }! b6 q
为把源文件(source file)加到Project里,选Project→Add To Project→New,选文件类型(如C++ Source File),输入File Name,这样就可以编写源文件;或者选File→New,选文件类型(如C++ Source File),输入File Name,编写完源文件后,选Project→Add To Project→Files将该文件或其它已存的源文件加到Project里。' F1 R& H' ^ H J( j/ a- l4 }- c
(6)Compile and Link:Compile- →Build- →Execute。
/ |/ B( J" T: p$ _' J2 P 注:为检验上述工作是否正确,可以调出并编译运行%UGII_BASE_DIR%\ugopen中的ucintr.c。
% k7 U3 S! C4 ~0 P 3.UG/Open API程序7 F7 u- q! O7 M8 j+ s* Y1 H. F# F; j6 }" P
(1)可执行文件(程序)类型
' ^; e" I& s3 A+ Y G. v- ? 从UG/Open API里使用函数来编程可以有两种不同的模式(mode):Internal和External,这里模式是指产生的可执行代码的类型,即是一个共享库(Internal)或是一个独立的可执行代码(External)。9 l5 B* F ^% X$ U. f' D
1)Internal UG/Open API的一般形式:/ w4 g; [1 P: F& o, P
#include //Prototypes exist in this file.6 h# o$ @% D( _4 I9 X6 v& F+ }1 p
//Additional include files as required.. Z' i k- ?# N* G+ ?
Void ufusr(char *param, int *retcod, int parm_len)
7 h5 p3 \# B% r" C0 y& N$ { { variable declarations' B u/ [. C8 h
UF_initialize();
% p+ |, m6 S- m0 k Function body
6 d8 l4 Y; K$ W4 m UF_terminate();
( g7 n B* `( V+ r$ n) b% Z }
8 J! F, B) @/ y! X: }) e Internal UG/Open API使用ufusr函数(主函数)作为程序运行的入口点,它可以看作是用户写的UG子程序/子函数。执行程序时,UG将程序装入内存并搜索ufusr, 程序从这里开始执行,执行完后由一个return语句返回UG。4 H! {- k" M4 ~5 b8 H, `
2)Extermal UG/Open API的一般形式:9 E1 n- r! q3 }6 w2 N/ R
#include ' e9 v' | C- c; e" S2 q8 q, Z; m
//Additional include files as required.
# Y# I0 O+ L4 R( h3 \- J) } Int main(int argc, char **argv)女
5 Z/ ]1 A" I$ V, ~. q) T) J* A" n { variable declarations. H5 D+ R% \ L3 Q; ?) M9 c' q& T
UF_initialize();; y& |9 u1 c. w7 `) L1 q
Function body) c4 m8 _2 z, h
UF_terminate();
6 f; {; e; i. I. c! H* M. U }
2 d- ~/ ~9 S- X b u0 p" n, y8 U4 n 输入主函数的参数(arguments)是标准的C参数:argc- argument count, argv-字符串指针。
7 h8 L* I. {% y: U" E; r* P (2)几点说明: t7 h: R2 R. }' c1 N& k: v
1)头文件(*.h file) 在程序中除了包含标准的ANSI C头文件外,还应包含所 使用的UG/Open API程序的头文件,在这些特定的头文件里描述了UG所称的“Types 和Symbols”,即用来定义结构体(structures)、枚举体(enums)、共用体(unions)和指针(pointers)的“类(type)”和用来定义常量(constants)的“串(string)”。( |5 N' Z' ~$ y' x0 N8 }' [2 F4 Q
2)程序的运行 一般地,可以从在UG图形界面里来运行,另外地可以从UG/Open MenuScript、User Exits、User Tools和UG/Open GRIP里调用并运行。) z0 `, T- m, ?. n8 I
3)函数(Functions)UG/Open API提供的函数形式和ANSI/ISO C标准相一致,即<返回数据类型> <函数名> (变量表)- ]+ q/ s0 Z, n
(3)UG对象模型(UG Object Model) m: n- k- }4 y
UG使用许多方法为其对象建立模型,根据对象的不同用途及其相互关系,UG对象可以是面向设计(design-oriented)、面向工程图(drafting-oriented)、面向分析(analysis-oriented)或者面向制造(manufacturing-oriented)的对象。UG开发人员编程的过程实际上就是访问、修改、植入UG对象从而建立起UG对象模型的过程。, V& [5 o; D2 h8 l1 a P+ a
每一个UG对象都是通过其唯一的标识符(identifier)(如tag)来引用,一个标示符的实际物理表示是一个无符号型整型变量(unsigned integer)。tag 在UG/Open API头文件uf_defs.h里被定义,它仅仅是把一个UG对象载入内存时的标示符。 ! _7 y( H; l# T. v( y1 P; d5 M
分享给好友复制网址隐藏签名档小字体 上一篇 下一篇 返回日志列表 相关搜索词: UG API LIB 变量 eXceed 本文链接: 复制 签名档1 M; R$ W* O; L1 c
在这个世界上,只有真正快乐的男人,才能带给女人真正的快乐。 ' y6 b: y5 w, A/ O$ P( v
评论列表想第一个看到日志抢沙发?9 Q5 v q( F4 y1 b9 \3 v+ B2 |
腾讯公司温馨提示:当前已出现通过网络、电话和短信等途径假冒中奖网站、“400”“0898”开头电话、宣称低价购物、购房退税等手段诈骗,请您提高警惕,慎防遭骗。识别更多网络骗术,请点击:腾讯反骗术帮助中心。发表评论取消批量删除批量删除全选删除1 l% ? [0 {1 X5 n
. z3 U/ \' v2 e a3 I
0 E! {8 x% S+ i* W9 j+ r5 B+ C/ l: [使用签名档匿名评论发表评论
8 T1 |+ b! a! ~0 t X# U3 ?& s系统正在进行升级维护中,暂不支持日志评论,敬请谅解!' P3 p# q# [. i. R2 B1 U
点击这里发表评论,如果您要显示签名档,请点击“附加功能”并勾选“使用签名档”
" w4 a+ f, `1 ?/ V# Z2 f2 _日志评论推出新附加功能!评论可以通知所有好友了。您还可以进行设置,保护个人隐私。
8 z5 }7 s# P9 |% ]/ g附加功能 : {$ Z9 \! ]6 _" F$ {$ R! q5 r
使用签名档 道具:请选择道具隐身草彩虹炫天使之爱 悄悄话 | (以小纸条形式发送) 查看今日免费发送数量
4 A5 Q% ?( w0 A. `# A
4 e4 B, g1 v. L, a通知所有好友(该评论可显示在所有好友的好友动态里)设置* ?6 V, S' Y8 ^! `- U
: x2 a7 T' Y9 F马上开通空间,体验权限日志、私密记事本等全新日志体验!提交! q6 ]+ Y% M3 j4 o' z
上一篇 下一篇 返回日志列表 |
|