NX二次开发应用
一 、NX API简介
NX是一款功能强大的CAD/CAM/CAE软件,它不仅可以通过UI操作来控制各种功能,还提供了多种应用程序开发包(API)对NX内部对象进行访问。在这些API基础上,用户可以开发各种自动程序,定制NX功能,甚至可以在现有NX功能之上二次开发新的CAD/CAM/CAE软件产品。 1. NX API 具有如下特点:
(1) 支持多种开发语言:C, C++, Java, .Net, Python。 (2) 支持多种操作系统平台:Windows,Linux,Unix。 (3) 超过90%的NX功能覆盖率。 2. NX API架构与统一对象模型
NX内部采用统一对象模型来描述NX内部任一对象及其操作。NX UI操作和NX API都是构建于NX统一对象模型之上,以确保NX API与从UI操作访问的是统一的NX内部对象模型。基于不同语言的NX API都是由同一个NX内部对象转化而来,无论用户采用哪一种语言的API其最终调用的是同一个内核函数,从而真正实现了平台无关性和开发语言无关性。
3. 现有NX API
自1976 年,UG (NX 的前身)提供了第一个API GRIP起,NX陆续了提供了UGOpen(1997 年),KF(2000 年),NXOpen(2004 年)等多种 API。 (1) GRIP(Graphics Interactive):一种类似LISP的简单交互式图形编程语言。GRIP程序以其运行效率高、简单易学和不长驻内存的特点深受工程人员的喜爱,但其可实现NX的功能比较少,有一定的局限性。一般适用企业简单的二次开发。 (2) UGOpen(也被称为 UFUN):一种基于C的NX二次开发API,包括3000多个C函数,其功能强大的特点适合企业或第三方软件公司进行系统、高级的开发。由于它是直接在 NX的内部代码的基础上建立的,所以可实现大部分NX的功能,但它需要有C语言和软件工程等技术的支持,相对比较难学。
(3) KF(Knowledge Fusion):一种应用于知识熔接技术的由求解需求驱动的解释性面向对象的语言,是基于知识工程的智能化的NX二次开发API,其灵活、易学、可以知识 驱动的特点适合企业或第三方软件公司进行专家系统的开发。但是目前它的功能不是很全,所以往往和 UGOpen和NXOpen 结合起来进行开发。
(4) NXOpen:一种完全基于面向对象的新一代NX二次开发API。它支持多种开发语言与多种操作系统平台,覆盖了NX绝大部分功能。可从Journal功 能直接录制NX的操作生成代码,开发更为简单,适合工程人员进行简单快速的开发,也适合企业和第三方软件公司进行高级复制的功能定制。
4. NX API 比较
用户在进行NX二次开发时需要了解各API的特点,结合项目开发的需求,选用适合的API进行开发。以下在对不同NX API就易用性,主流性和可扩展性方面进行了较为客观的比较:
?易用性:开发语言是否清楚,直观,并有较好的帮助文档与代码例程。
o ?主流性:是否支持主流的开发语言与主流的IDE(集成开发环境)。 o ?可扩展性:代码是否容易移植到新的NX API。
o ?发布的NX版本:要开发的NX版本应该高于NX API的发布版本。
o
二、 NX开发环境设置
1. 基本环境变量
环境变量在NX的运行过程中有着重要的应用,一些环境变量在安装NX之后便已经设置。其中最常用的基本环境变量包括: UGII_BASE_DIR NX 安装的文件夹路径
UGII_ROOT_DIR NX 安装文件夹中UGII的位置 UGS_LICENSE_SERVER 28000@###### UGII_LANG ENGLISH
其它常用的环境变量在ugii_env_ug.dat 文件中定制,该文件默认位于$UGII_ROOT_DIR目录下,不建议用户修改。用户可以修改同目录下的ugii_env.dat 文件,添加一些环境变量覆盖已有的环境变量以控制NX的运行方式,该文件可以通过环境变量UGII_ENV_FILE进行设定。
2. 用户环境变量
NX用户通常应用环境变量指向一个根目录来配置开发的应用程序。常用的环境变量包含以下两个:
UGII_USER_DIR:用户二次开发程序根目录的完整路径。该环境变量在NX安装之后处于未定义状态,定义之后,NX Open就可以从这些目录得到二次功能扩充。该环境变量主要应用于单个应用程序的开发过程中。
UGII_CUSTOM_DIRECTORY_FILE:指向一个包含所有用户二次开发程序根目录完整路径。该环境变量在NX安装后默认指 向
$UGII_ROOT_DIR\\menus\\custom_dirs.dat文件。用户可以修改该文件,在文件中添加任意多个NX二次开发程序根目录路 径,以便用户对二次开发程序进行系统的管理和配置。二次开发应用程序的发布推荐使用该方法,尤其适用于企业级客户多系统开发的应用。通过拷贝文件可以方便 的实现多NX用户配置以及以后的NX版本升级维护。 3. 应用程序运行目录
通过环境变量设置的用户二次开发程序根目录,即通常所说的应用程序运行目录。NX在运行过程中将遍历这些根目录的子目录,加载其中定义的客制化菜单、工具条、对话框、二次开发应用程序以及UDO用户自定义库。该根目录包含的子目录如下图所示:
每个子文件夹的功能如下表所示:
4. 运行模式
(1) 远程运行模式
远程运行模式允许用户在一个独立的NX环境进程中执行应用程序。该NX环境可以是运行在本机上的也可以是连接到另一台机器上的进程。由于远程运行模式的实 现过程基于.NET或者Java架构所提供的服务,因此,该模式不支持C++版本的NXOpen API。
5. 卸载方式
NXOpen API 为用户提供了一个入口函数(GetUnloadOption),NX自动获得该入口返回参数来控制应用程序的卸载方式。提供的卸载方式包括:
GetUnloadOption代码格式:应用C++语言开发NXOpen时,其卸载方式入口函数定义为:
extern int ufusr_ask_unload( void ) {
? //return (int)Session::LibraryUnloadOptionExplicitly; //显示卸载方式 ? //return (int)Session::LibraryUnloadOptionImmediately; //立即卸载方式 ? return (int)Session::LibraryUnloadOptionAtTermination; //NX终止卸载方式 }
在某些情况下,如应用NXOpen C++向导生成工程时,其卸载方式也可能定义为:
extern int ufusr_ask_unload( void ) {
? //return( UF_UNLOAD_SEL_DIALOG ); //显示卸载方式 ? //return( UF_UNLOAD_IMMEDIATELY ); //立即卸载方式 ? return( UF_UNLOAD_UG_TERMINATE ); //NX终止卸载方式 }
注意:应用程序注册了部件或者UDO相关回调函数,必须使用NX终止卸载方式。
6. 用户入口 (1) 用户入口概念
用户入口(User Exit)是NXOpen API的一个重要概念,是NX在某些特定的位置预定义了一些特定功能的入口。NX运行到这些入口时,将自动检测用户是否已定义了指向内部程序位置的环境。 若没有定义,则以NX默认的方式运行;若已定义,则从该处自动加载并运行用户开发的程序。不同的用户入口具有不同的User Exit名称,用户应用程序以不同的User Exit作为入口点, 就能决定应用程序在NX运行的特定阶段被激活并运行。 (2) 函数定义格式
每个用户入口都有唯一的入口名称,以便用户在应用程序中调用。在通常情况下,用户入口函数的参数和返回值都相同,其函数定义格式如下: void entry_point(char *param, int *retcod, int param_len); 其中,param是输入参数,param_len为参数param的长度,由NX系统处理; retcod为输出参数。
(3) 用户入口函数实现方法如下:
在NXOpen帮助文档中查找符合应用程序加载需求的用户入口,在应用程序中添加该用户入口函数定义。
编写程序实现代码并编译生成动态链接库(DLL)文件。
? 在NXOpen帮助文档中找到用户入口函数对应的环境变量名称,添加新的环境变量“环境变量名=DLL 全路径”。
? 运行NX到该特定入口时将自动加载并运行用户程序。 (4) 常用用户入口介绍
NX提供的用户入口有很多,详细的可以参考NX帮助文档。常用的用户入口如下表所示: