|
日志: l' b3 v4 z+ V& i
分享给好友复制网址隐藏签名档小字体 上一篇 下一篇 返回日志列表 + J0 S4 D. Q N8 B( r! [" o9 P
微机平台的ug二次开发技巧 , U8 J6 J5 l7 u1 P A
编辑 | 删除 | 权限设置 | 更多▼ 设置置顶 n% q6 \- k& J( m$ c
* I9 E0 Z: n8 l/ p& Z1 L推荐日志
D3 y" x5 n, _' ^ / `% z0 b; L. M9 F) Z
转到私密记事本
+ {7 c4 y$ l: M, U1 U 严冰 发表于2009年05月27日 16:22 阅读(6) 评论(0)
, ]( n( y- L; O6 f' r" @分类: 个人日记 权限: 公开
N0 K; t1 u. r- [: r
; _$ m3 u1 I' g' J1 Y9 U8 @ 0 c8 Z. b( r! W5 t+ `* R3 g6 \5 H
本文叙述如何在以Windows NT 4.0为操作系统的微机工作站上进行基于VC++6.0的UG(V14.0)二次开发,并对UG的开发模块和UG/Open API的编程方法作了介绍。$ Y+ r. M3 k# B7 W* _1 j0 t
UG/Open通过一个开放的平台包含一系列的基于UG的应用软件的柔性集成。其目的是为了计算机集成应用,实现数据共享。它具有开放的体系结构。
% Y( i6 x0 Y/ C6 B- 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技术并使之成为应用可能。
4 Z& d% `& w/ I. Z$ L: ]/ R6 k UG/Open API是一个允许程序访问并影响UG对象模型的程序集,并同时提供一个UG所共容的编译和联接程序的方式。它支持C/C++语言,头文件(header files)支持ANSI C。在UG软件系统中相关的还有:UG/Open GRIP(/NC), UG/Open MenuScript, UG/Open IMAN ITK和Parasolid。* p( P! H3 t1 d# k
UG/Open API执行许可证:开发运行一个UG/Open API程序需有UG/Open开发许可证和执行许可证,用户通过UF_initialize()来访问并通过UF_terminate()来返还这些许可证。
4 `& K$ F5 F0 n/ a 例程和UG/Open API头文件在用户应用平台ug安装目录下的ugopen目录里,Windows NT系统是%UGII_BASE_DIR%\ugopen,用户可以访问并利用这些程序和文件。3 {1 Z- g5 P5 M2 D; z
一、UG/Open API在Windows NT操作系统里的安装; y4 o* _( i8 b- J1 m) V
1.UG(V14.0)要求C编译器版本为Microsoft Visual C++V5.0以上,本文所述为VC++6.0版本。
! o& Z/ U L! V9 C 2.定义环境变量(environment variables),定义方法:开始-设置-控制面板-系统,在“系统特性”框里点击“环境”栏,在“用户变量”里即可设置。
4 F1 }( u) L, V" H& Y 必需的环境变量:UGII_USERFCN,该变量指向UG/Open API库函数所在的目录。4 h, g4 P ^; J
其它的环境变量,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(命令表)。; P, a. i- ?; ~' I3 v J$ }, J8 A
结论,在用户变量里定义:
# d# e, M/ {- Y+ }) x: V& S C UGII_USERFCN C:\ug\Eds140\Ugopen(也可在ugii_env文件中定义)1 r& R' z. l/ S
EXCEEDHOME C:.\ug\exceed+ X' A! O9 q+ r$ k( ?# E0 w; j, ?
EXCEEDLIBS C:\ug\exceed\xdk: j7 ^) l9 N4 ]3 g+ o% x% k( M
INCLUDE D:\App\VisualStudio\VC98\Include5 S( I- G6 B/ M' F! J5 u) J& V# A
LIB C:\ug\Eds140\Ugopen\ugraf.lib;
1 O& A# @" q+ ~ ] C:\ug\Eds140\Ugopen\uguser.lib;
2 x1 r( G: I! f& d5 U! A9 ]( ~ D:\App\VisualStudio\VC98\Lib6 [. m; p2 E3 _: J
PATH C:\ug\Eds140\Ugii\og1;C:\ug\exceed;+ v/ [; u0 [' B6 q/ ?
D:\App\VisualStudio\VC98\Bin;
$ G+ ~/ {$ w5 Q$ J C:\ug\Eds140\Ugii# x4 Q; k. I1 W* A
2.在VC++里创建一个UG/Open API Project
: e5 i: o2 s7 |4 V6 W: B (1)进入Microsoft Visual C++。* h& t& J& }( y/ @1 ?" |- d
(2)创建Project: File→New→Projects,对于一个Internal UG/Open API程序选Win32 D-Link Library(对于一个Extermal UG/Open API程序选Win32 Console Application);并输入Project name。! F/ _* ~+ q j
(3)Configure(配置)Project Settings
6 h( c$ ?9 j/ g, p( { 选Project→Settings→Debug,“Category”栏是General,在“Executable for debug session”栏内输入:C:\ug\eds140\Ugii\ugraf.exe(这是为调试Internal UG/Open API program而设置的参量);在“Program arguments :”栏内输入ogl auto。" _+ ^. y9 @; S" J8 l
选Project→Settings→C/C++,在“Category:”内选Code Generation;在“Use Run-Time library:”内选Multithreaded DLL。7 ?$ B' k" J& e8 E2 q& S- M
选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)。1 q k- c t' c/ @
(4)Configure(配置)Tools Settings
% `6 H6 R- `5 ^$ u 选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。结论是依次输入:
5 x: V. v( X/ v+ `" L8 w% S C:\ug\Eds140\Ugopen
1 [& ^* m& h7 \ C:\ug\exceed\xdk\include
, b, c/ `" B5 c D:\App\VisualStudio\VC98\Include- ~- D$ g7 I* w9 }) R
C:\ug\exceed\LIB; @" e/ z9 i+ K. y, I
D:\App\VisualStudio\VC98\Mfc\include
' ]% y5 b1 Y2 N. h% `/ G6 [* ]8 ~0 \ D:\App\VisualStudio\VC98\Atl\include
; b4 V9 ]* [" a C:\ug\Eds140\Ugii\ogl$ X( w! _6 y7 ?5 v! S; X' h
C:\ug\Eds140\Ugii\xwi
5 g! s7 E( N% v D:\App\VisualStudio\VintDev98\bin3 p, H' M+ o- }" S& b7 H+ V% u8 X
选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。结论是依次输入:1 P/ s3 y5 N- Z8 U7 _+ \
C:\ug\Eds140\Ugopen
/ U2 n2 ]& N' e+ p# Z1 p C:\ug\exceed\xdk\lib1 C0 l2 S$ l( x$ Y9 h% J
D:\App\VisualStudio\VintDev98\bin
) p2 b7 B7 ]2 o' O C:\ug\exceed6 A4 y4 a E/ F7 F0 h: V
D:\App\VisualStudio\VC98\Lib D:\App\VisualStudio\VC98\Mfc\lib
" |3 @- g: R0 ^+ V. P. T C:\ug\Eds140\Ugii
$ G% {: t7 H; `- X( Z# o0 q" N# m C:\ug\exceed\LIB
2 r& F3 A9 w& l& M6 w! k (5)Add Files to Project
+ ^: o- A9 W& m/ ^1 P0 ]! P* B 为把源文件(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里。" M! p# X& e0 G6 T @" `
(6)Compile and Link:Compile- →Build- →Execute。
: Q. G* p1 n- g3 Z1 p. x1 D6 g2 ` 注:为检验上述工作是否正确,可以调出并编译运行%UGII_BASE_DIR%\ugopen中的ucintr.c。- j: r& m* v9 G# N5 l
3.UG/Open API程序# N% E5 `4 ^0 F+ H
(1)可执行文件(程序)类型
3 x* }, m3 L$ W' l" w 从UG/Open API里使用函数来编程可以有两种不同的模式(mode):Internal和External,这里模式是指产生的可执行代码的类型,即是一个共享库(Internal)或是一个独立的可执行代码(External)。
( `3 x4 o2 i. j 1)Internal UG/Open API的一般形式:
; C- T; k2 M* K2 F) m7 B2 }3 Z #include //Prototypes exist in this file.% l9 q3 B& m n1 G
//Additional include files as required.8 m/ Y* J4 P5 }
Void ufusr(char *param, int *retcod, int parm_len)6 Z% r) ~7 r1 o6 q$ g4 H1 n: l
{ variable declarations! Q$ E9 m1 k$ p/ W( Z3 o' N
UF_initialize();" S" L3 N( ]" m! Y' @
Function body6 G8 ]' {9 b8 V, a+ n( g
UF_terminate();
0 v4 Q/ a2 _. @; q } " H2 F1 y' e" \( A1 u1 Y
Internal UG/Open API使用ufusr函数(主函数)作为程序运行的入口点,它可以看作是用户写的UG子程序/子函数。执行程序时,UG将程序装入内存并搜索ufusr, 程序从这里开始执行,执行完后由一个return语句返回UG。5 _- Q, L6 L9 `4 L5 n: }% P- _1 w
2)Extermal UG/Open API的一般形式:
1 s7 I# y$ {- f #include # O; t$ l4 L. \( d. q: @
//Additional include files as required." R: @! ?6 T# @1 }' T" v
Int main(int argc, char **argv)女+ I; L; J& i% K5 Z! G& d3 B
{ variable declarations8 S: w/ z5 E! c6 u
UF_initialize();
/ t; C' g ~; ]! b Function body
. L! [9 G8 {1 G8 c UF_terminate();" _6 N( ~1 u& a
}
) Y' r' [: \9 T 输入主函数的参数(arguments)是标准的C参数:argc- argument count, argv-字符串指针。
" S8 Y' |, f) [$ [; O- G; C (2)几点说明1 D" Y/ Y6 o, k* H6 V- k
1)头文件(*.h file) 在程序中除了包含标准的ANSI C头文件外,还应包含所 使用的UG/Open API程序的头文件,在这些特定的头文件里描述了UG所称的“Types 和Symbols”,即用来定义结构体(structures)、枚举体(enums)、共用体(unions)和指针(pointers)的“类(type)”和用来定义常量(constants)的“串(string)”。' ]; R0 G' j+ \: {5 V% b' }3 R
2)程序的运行 一般地,可以从在UG图形界面里来运行,另外地可以从UG/Open MenuScript、User Exits、User Tools和UG/Open GRIP里调用并运行。% ^' D! f6 K, g* Z9 ~+ T
3)函数(Functions)UG/Open API提供的函数形式和ANSI/ISO C标准相一致,即<返回数据类型> <函数名> (变量表)
# U5 y: H! w2 Q0 F7 F Y (3)UG对象模型(UG Object Model)
1 Y% X7 r# Q" O! S UG使用许多方法为其对象建立模型,根据对象的不同用途及其相互关系,UG对象可以是面向设计(design-oriented)、面向工程图(drafting-oriented)、面向分析(analysis-oriented)或者面向制造(manufacturing-oriented)的对象。UG开发人员编程的过程实际上就是访问、修改、植入UG对象从而建立起UG对象模型的过程。+ t n. p M' ?
每一个UG对象都是通过其唯一的标识符(identifier)(如tag)来引用,一个标示符的实际物理表示是一个无符号型整型变量(unsigned integer)。tag 在UG/Open API头文件uf_defs.h里被定义,它仅仅是把一个UG对象载入内存时的标示符。
- u$ t$ |6 d; Z1 N5 s: c$ M+ ^( R分享给好友复制网址隐藏签名档小字体 上一篇 下一篇 返回日志列表 相关搜索词: UG API LIB 变量 eXceed 本文链接: 复制 签名档. N# C2 G6 `+ g! m2 f$ r' t. g
在这个世界上,只有真正快乐的男人,才能带给女人真正的快乐。 ! {1 N% ^$ E) [& a/ P; T* O
评论列表想第一个看到日志抢沙发?
- v f" H. I+ h" T腾讯公司温馨提示:当前已出现通过网络、电话和短信等途径假冒中奖网站、“400”“0898”开头电话、宣称低价购物、购房退税等手段诈骗,请您提高警惕,慎防遭骗。识别更多网络骗术,请点击:腾讯反骗术帮助中心。发表评论取消批量删除批量删除全选删除
8 ?/ J% G2 T0 @( \4 S
% g1 `4 i7 _- o' O. w! G# L, t# F) l; h9 |; j
使用签名档匿名评论发表评论
! x9 d" h+ Z: ~: u8 ]6 M系统正在进行升级维护中,暂不支持日志评论,敬请谅解!5 U" y4 |1 H& ]. X
点击这里发表评论,如果您要显示签名档,请点击“附加功能”并勾选“使用签名档”
' x% t' v |0 q& `日志评论推出新附加功能!评论可以通知所有好友了。您还可以进行设置,保护个人隐私。
( ^- R% i! E% z6 k2 |: m, {' v附加功能 1 X1 {5 _5 [ ^/ f& x1 Y0 X( g
使用签名档 道具:请选择道具隐身草彩虹炫天使之爱 悄悄话 | (以小纸条形式发送) 查看今日免费发送数量
& t7 J; E2 Z) U0 p7 S; z" F9 y% m# @, H( G
通知所有好友(该评论可显示在所有好友的好友动态里)设置
7 H+ N. p+ b+ w+ ^* z+ s
+ x2 |" `' I0 v9 z$ j马上开通空间,体验权限日志、私密记事本等全新日志体验!提交
5 J' h# G6 }: ~* i) ?1 F上一篇 下一篇 返回日志列表 |
|