当前位置:首页 >> 机械/仪表 >>

VC++的UG二次开发技术


基于 VC++的 UG 二次开发技术 胡道钟 (东风汽车模具厂) 摘 要 本文叙述了如何在以 Windows NT 4.0 为操作系统的微机工作站上进行基于 VC+ +6+0 的 UG(V14.0)二次开发,并对 UG 的开发模块和 UG/Open API 的编程方法作了介绍. 关键词 VC++UG UG/Open API 二次开发 编程 1 概述 UG 是一个功能强大的通用 3

D 机械 CAD/CAM 软件系统,用户若要以它为平台进行二次开 发,实现大型的机械设计系统(如模具智能化专家系统 CAD 软件),就必须利用 UG 的开发模 块,借助 C/C++,在以 UNIX 为操作系统的工作站上或以 Windows 为操作系统的微机工作站 上编写 C 程序,进而生成可执行文件.本文的目的就在于叙述如何在以 Windows NT 4+0 为操作系统的微机工作站上进行基于 VC++6+0 的 UG(V14+0)二次开发,并对 UG 的开发模 块和 UG/Open API 的编程方法作了介绍. 1.1 UG/Open 它通过一个开放的平台包含一系列的基于 UG 的应用软件的柔性集成.其目的是为了计 算机集成应用,支持第三方和 UG 的应用,使基于不同的计算机平台从不同的场所(不同的 网络)实现数据共享,甚至通过 Internet 访问它的内容.它在注重于集成化和本地化的软 件应用的同时,还致力建立一个能供各方利用的开放体系机构. UG/Open 提供了一种使顾客能够完成下列工作的应用软件和工具: (1)通过 UG/Open API 或 UG/Open GRIP 提供了与 UG 对象模型(UG Object Model)的接口;

(2)生成和管理用户自定义对象(User Defined Objects 或 Custom Objects),包括管理它 们与 U 对象的相关性,提供一种刷新和显示用户自定义对象的方法; (3)提供反映第三方应用软件的 UG 图形界面本地化方法; (4)利用相关产品如 IMAN ITK 和 Parasolid; (5)利用和集成新的 UG/Open 技术并使之成为应用可能. 1.2 UG/Open API(User Function) 是一个允许程序访问并影响 UG 对象模型的程序集,除程序外,它还提供一个 UG 所共 容的编译和联接程序的方式.它支持 C/C++语言,头文件(header files)支持 ANSI C. 在 UG 软件系统中与它有关的还有:UG/Open GRIP,UG/Open GRIP NC,UG/Open MenuS cript,UG/Open IMAN ITK 和 Parasolid.

1.3 UG/Open API 执行许可证(execute license) 在安装 UG/Open API 软件包的每一个地点都需要有 UG/Open 开发许可证(develop lic ense)和执行许可证来开发运行一个 UG/Open API 程序,在一个工作站上同时执行多进程 API 程序时需要附加的 UG/Open API 执行许可证,用户通过 UF_initialize()来访问并通过 UF_terminate()来返还这些许可证. 例程和 UG/Open API 头文件在用户应用平台 UG 安装目录下的 ugopen 目录里,Windows NT 系 统 是%UGII_BASE_DIR%\ugopen,用户可以访问并利用这些程序和文件. 2 UG/Open API 在 Windows NT 操作系统里的安装 2.1 UG(V14.0)要求 C 编译器版本为 Microsoft Visual C++V5.0 以上,本文所述为 VC++6. 0 版本. 2.2 定义环境变量(environment variables) 定义方法:开始→设置→控制面板→系统,在"系统特性"框里点击"环境"栏,在"用 户变量"里即可设置. 必需的环境变量:UG_USERFCN, 该变量指向 UG/Open API 库函数所在的目录.其值为 :C:\ug\Eds140\Ugopen 其它的环境变量: (1)变量:EXCEEDHOME,若欲使用包含 UG/Open API Motif 程序的 prototypes 的 uf_u i_xt.h 头文件时必须定义.其值为:C:\ug\exceed; (2)变量:EXCEEDLIBS,在 uflink 连接时指定应包含哪个 eXceed/NT-XDK 库函数时需 定义,其值为:C:\ug\exceed\xdk; (3)变量:INCLUDE,使 C 预处理器查找头文件(.h files).其值为:D:\App\Visu alStudio\VC98\Include; (4)变量:LIB,它使 C 连接器查找对象库函数并输入库函数.其值为:C:\ug\Eds 140\Ugopen\ugraf.lib; C:\ug\Eds140\Ugopen\uguser.lib; (5)变量:PATH,它使系统查找可执行文件,DLLs(Dynamic Link Library,动态连 接库函数)和 Scripts(命令表).其值为:C:\ug\Eds140\Ugii\og1;C:\ug\excee d;D:\App\VisualStudio\VC98\Bin;C:\ug\Eds140\Ugii. 结论,在用户变量里定义: UG_USERFCN C:\ug\Eds140\Ugopen(也可在 ugii_env 文件中定义)

EXCEEDHOMEC:\ug\exceed EXCEEDLIBSC:\ug\exceed\xdk INCLUDED:\App\VisualStudio\VC98\Include LIBC:\ug\Eds140\Ugopen\ugraf.lib; LIBC:\ug\Eds140\Ugopen\uguser.lib; D:\App\VisualStudio\VC98\Lib PATHC:\ug\Eds140\Ugii\og1;C:\ug\exceed; D:\App\VisualStudio\VC98\Bin;C:\ug\Eds140\Ugii 3 在 VC++里创建一个 UG/Open API Project 3.1 进入 Microsoft Visual C++. 可建立一个桌面快捷方式. 3.2 创建 Project:File→New→Projects 对于一个 Internal UG/Open API 程序选 Win32 Dynamic-Link Library(对于一个 Ext ernal UG/Open API 程序选 Win 32 Console Application);在"Project name:"内输入 Project name. 3.3 Configure(配置)Project Settings 选 Project→Settings→Debug,"Category"栏是 General,在"Executable for deb ug session"栏内输入:C:\ug\eds140\Ugii\ugraf.exe(这是为调试 Internal UG/O pen API program 而设置的参量);在"Program arguments:"栏内输入 ogl auto. 选 Project→Settings→C/C++,在"Category:"内选 Code Generation;在"Use Run -Timelibrary:"内选 Multithreaded DLL. 选 Project→Settings→Link,"Category" 栏是"general";在"Output file name :"文本框内若无缺省输出文件名就指明;在"Object/library modules:"栏末加上 ugra f.lib Xt.lib Xlibcon.lib Xlib.lib (程序为 Internal UG/Open API with direct X/ Motif references 时).(若程序为 External UG/Open API 则加上 Uguser.lib;若为 Inte rnal UG/Open API without direct X/Motif references 则加上 ugraf.lib). 3.4 Configure(配置)Tools Settings 选 Tools→Options-->Directories,在"show directories for:"内选 Include fi les,在"Directories:"内输入 C:\ug\eds140\ugopen(并使用 Move Item Up 按钮将它 放在所有 directories 之首); 若是 Internal UG/Open API project, 因要使用 UG 附带的 支撑软件 Hummingbird Exceed 的 include files, 故再输入 C:\ug\exceed\xdk\inc

lude(并使用 Move Item Up 按钮将它放在 C:\ug\eds140\ugopen 之后其它 directories 之前).结论是依次输入: C:\ug\Eds140\Ugopen C:\ug\exceed\xdk\include D:\App\VisualStudio\VC98\Include C:\ug\exceed\LIB D:\App\VisualStudio\VC98\Mfc\include D:\App\VisualStudio\VC98\Atl\include C:\ug\Eds140\Ugii\ogl C:\ug\Eds140\Ugii\xwi D:\App\VisualStudio\VIntDev98\bin 选 Tools→Options-->Directories,在"show directories for:"内选 Library fi les,在"Directories:"内输入 C:\ug\eds140\ugopen(并使用 Move Item Up 按钮将它 移至所有 directories 之首), 若是 Internal UG/Open API project, 因要使用 UG 附带的 支撑软件 Hummingbird Exceed 的库函数(libraries), 故再输入 C:\ug\exceed\xdk\ lib(并使用 Move Item Up 按钮将它放在 C:\ug\eds140\ugopen 之后其它 directories 之 前). 结论是依次输入: C:\ug\Eds140\Ugopen C:\ug\exceed\xdk\lib D:\App\VisualStudio\VIntDev98\bin C:\ug\exceed D:\App\VisualStudio\VC98\Lib D:\App\VisualStudio\VC98\Mfc\lib C:\ug\Eds140\Ugii C:\ug\exceed\LIB 3.5 Add Files to Project 创建完一个 Project 后,启动 VC++,File→Open Workspace→双击 Project 名→点击 *.dsw 文件名(打开),这样就进入了该 Project 的 VC++开发环境. 为把源文件(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 里. 3.6 Compile and Link:Compile→Build→Execute 注:在进行上述设置时应根据各自的实际情形作相应变更.为检验上述工作是否正 确,可以调出并编译运行%UG_BASE_DIR%\ugopen 中的 ucintr.c. 4 UG/Open API 程序 4.1 可执行文件(程序)类型 从 UG/Open API 里使用函数来编程可以有两种不同的模式(mode):Internal 和 Exte rnal,这里模式是指产生的可执行代码的类型,即是一个共享库(Internal)或是一个独 立的可执行代码(External). (1) Internal UG/Open API 的一般形式: #include <uf.h>//Prototypes exist in this file. //Additional include files as required. void ufusr(char *param, int *retcod, int parm_len) {variable declarations UF_initialize(); //**** body ******* UF_terminate(); } Internal UG/Open API 使用 ufusr 函数(主函数)作为程序运行的入口点,它可以看作 是用户写的 UG 子程序/子函数.执行程序时,UG 将程序装入内存并搜索 ufusr,程序从这 里开始执行,执行完后由一个 return 语句返回 UG. (2)External UG/Open API 的一般形式: #include<uf.h> //Additional include files as required. int main(int argc, char **argv) {variable declarations UF_initialize(); //**** body ******* UF_terminate(); } 输入主函数的参数(arguments)是标准的 C 参数:argc - argument count,argv 字符串指

针. 4.2 UG/Open API 程序的几点说明 (1)程序的开始和终止:所有的 UG/Open API 程序必须正确的开始和终止以配置和返 还 UG/Open APIlicense,用户使用两个 C 函数 UF_initialize()和 UF_terminate()来实现 这一点,在定义变量后调用的第一个 UG/Open API 函数必须是 UF_initialize(),且最后 一个调用函数也必须是 UF_terminate(). (2)头文件(*.h file):在程序中除了包含标准的 ANSI C 头文件外,还应包含所使 用的 UG/Open API 程序的头文件. (3)数据类型:除了标准 C 数据类型,UG/Open API 还大量使用了用来定义结构体(st ructures),枚举体(enums),共用体(unions)和指针(pointers)的"类(type)"和用来定 义常量(constants)的"串(string)", UG 将它们统称为"Types and Symbols",并在特定 的头文件里描述它们. (4)程序名:开发者为应用软件所取的程序名,应不与所写的其它应用软件名或使用 的第三方软件名相冲突. (5)程序的运行:一般地,在 UG 图形界面里从 File→Execute UG/Open→User Funct ion 来运行 UG/Open API(*.dll)文件,另外也可以从 UG/Open MenuScript,User Exits, User Tools 和 UG/Open GRIP 里调用并运行. 4.3 函数(Functions) UG/Open API 提供的函数和 ANSI/ISO C 标准相一致,即以下面的形式定义: <返回数据类型><函数名>(变量表) 4.4 UG 对象模型(UG Object Model) UG 使用许多方法为其对象建立模型,根据对象的不同用途及其相互关系,UG 对象可 以是面向设计(design-oriented),面向工程图(drafting-oriented),面向分析(analy sis-oriented)或者面向制造(manufacturing-oriented)的对象.UG 开发人员编程的过程 实际上就是访问,修改,植入 UG 对象从而建立起 UG 对象模型的过程. 每一个 UG 对象都是通过其唯一的标识符(identifier)(如 tag)来引用,一个标示符的 实际物理表示是一个无符号型整型变量(unsigned integer).tag 在 UG/Open API 头文件 uf_defs.h 里被定义,它仅仅是把一个 UG 对象载入内存时的标示符. 4.5 一个 Internal UG/Open API 例程 //Creat two blocks and unite #include <uf.h>//initialize,terminate,UF_get_fail_message

#include <uf_modl.h>//User Function modeling commands void ufusr(char *param,int *retcode,int parm_len) { UF_FEATURE_SIGN sign=UF_NULLSIGN; UF_FEATURE_SIGN sign1=UF_POSITIVE; double block_orig[3]={0.0,0.0,0.0}; double block_orig1[3]={0.0,0.0,2.5}; char *block_len[3]={"1","2","3"}; char *block_len1[3]={"1", "1", "1"}; tag_t blk_obj; tag_t blk1_obj; UF_initialize(); UF_MODL_create_block1(sign,block_orig,block_len, &blk_obj); UF_MODL_create_block1(sign1,block_orig1,block_len1, &blk1_obj); UF_terminate(); } 5 结 论 (1)UG 具有良好的二次开发能力,可进行满足不同层次用户不同需求的二次开发. (2)在以 UNIX 为操作系统的图形工作站上 UG 有自带的 User Function 开发界面,在数 量众多的以 Windows 为操作系统的微机工作站上通过上述设置同样可以编写运行大型 C 程 序. (3)借助 UG 其它开发工具(如 UG/Open UIStyler,UG/Open MenuScript)可以实现面向 对象的大型应用程序的开发和应用. 致谢:与作者同时进行本项工作的还有陈宏彬硕士,冯春硕士,胡海工程师,杜容 军工程师,系统工程师何冬瀛等,感谢他们真诚的帮助与合作.对 Unigraphics Soluti on 公司成都办事处的钟岷,刘其荣工程师以及作者攻读硕士学位期间的导师--吉林工业

大学的李运兴教授,东风汽车模具厂总师朱培玉高级工程师表示衷心的感谢.

相关文章:
UG二次开发技术的研究
本文探讨 UG 二次开 发技术,重点研究通过 VC 编程调用 UG/OPEN API 函数设计模具的技术。 关键词:UG 二次开发 UG/OPEN 1. 引言 Unigraphics(简称 UG)在 ...
NX二次开发(非常有用)
NX二次开发(非常有用)_信息与通信_工程科技_专业...VC++项目中; (6)修改 C 文件,添加回调函数代码,...nx二次开发技术简介 暂无评价 13页 免费 UG NX ...
基于VC++的UG二次开发技术2
基于VC++的UG二次开发技术2_能源/化工_工程科技_专业资料。ugUG 二次开发的过程与方法 曾向阳 (深圳职业技术学院计算中心) 摘要 本文系统介绍了在美国 UGS 公司...
手把手教你做ug二次开发
UG二次开发论文集 226页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出...设置 vc 的环境。 Project -> Settings -> C/C++ -> Category ...加上头...
UG二次开发入门
UG二次开发入门_信息与通信_工程科技_专业资料。UG原来是由工作站上移植过来的...发挥出 VC 强大的功能和极其丰富的资源, 包括 MFC 类库, 使用面向对象的软件工程...
UG二次开发
Windows 平台上 UG 的二次开发 南京欧奔软件技术有限公司 [摘 要] 通过在...1.3 设置 VC++6.0 环境 ⑴ 建立一个空的 DLL 文件 File→new→Projects→...
第10章 UG二次开发入门
? ? ? 参数化技术 UG 二次开发知识储备 UG 二次开发介绍 实例详解 第 10 ...在后面的实例中, UG/OpenAPI 二次开发环境是 VC++6.0, 但它所用的语言...
手把手教你做UG二次开发
时代码已经改变,要把相应的改变加到 vc 的工程中去,(推荐一个工具 Araxis Merge). ZZZ 斑竹辛苦了! 小弟正要搞一个 UG 二次开发的项目,以后有问题还请多多...
NX二次开发应用
NX 二次开发应用 一、NX API 简介 NX 是一款功能...(Knowledge Fusion):一种应用于知识熔接技术的由...其 VC++向导文件保存在%UGII_BASE_DIR%\ugopen\...
VC++的UG二次开发技术
暂无评价|0人阅读|0次下载|举报文档 VC++的UG二次开发技术_机械/仪表_工程科技_专业资料。很有用的有关UG二次开发的基本知识!今日...
更多相关标签:
ug二次开发技术基础 | ug二次开发 | ug二次开发视频教程 | ug二次开发招聘 | 基于c语言ug二次开发 | ug二次开发用什么语言 | ug二次开发实例 | ug 二次开发 选择对象 |