
5.1 用户出口
在实战项目中,您可能期望在NX中执行某一操作时,也执行NXOpen应用程序,例如:在保存一个部件时检查文件名是否合法。为了解决这种需求,NX在某些位置规定了“出口”,它允许您决定是否在指定的出口自动运行NXOpen应用程序。如果您使用了其中一个出口,NX会检查您是否定义了指向NXOpen应用程序位置的环境变量。如果定义了环境变量,NX将运行NXOpen应用程序。
用户出口是一个内部开放的C和C++API程序,在NX的特定位置有一个唯一的入口点。每一个用户出口都有一个唯一的环境变量,指向要执行的应用程序。当定义了这个环境变量并在NX中选择了正确的菜单选项时,就会执行NXOpen应用程序。
5.1.1 ufusr()
ufusr()是所有内部开放API的主函数入口点,它也可用于用户出口。触发NXOpen应用程序ufusr()入口的方式如表5-1所示。
表5-1 触发NXOpen应用程序ufusr()入口的方式

5.1.2 ufsta()
在应用程序开发过程中,您可能期望NX在启动的时候就做一些工作,使用ufsta()这个出口可以解决这一需求,这个用户出口使用环境变量USER_STARTUP。此外,MenuScript和用户定义对象(User Defined Objects)也可以使用这个出口。
ufsta()的常规使用方法分为以下两步:
(1)在程序代码中使用下列格式

(2)编译链接生成*.dll文件并将它拷贝到NX二次开发根目录下的startup目录之中。利用ufsta()出口开发与用户定义对象相关的应用程序,通常将所生成的*.dll文件放到NX二次开发根目录下的udo目录中。
5.1.3 其他出口
在NX二次开发时,除常用的ufusr()与ufsta()外,还有其他用户出口,表5-2列出了目前NX支持的所有用户出口。每个用户出口的详细说明,开发者可以参考官方帮助文档NX Open Programmer's Guide中与“User Exits”相关的描述。
表5-2 其他用户出口与环境变量

续表

5.1.4 用户出口实例
本实例实现的功能为:在保存当前部件前,先检查部件的名称中是否包含了“NXOpen”字符串,如果包含该字符串就正常保存部件,如果未包含就提示用户。
利用用户出口的功能实现的步骤如下:
(1)启动Visual Studio,利用NXOpen C++Wizard创建一个名为ch5_1的项目(本例代码保存在“D:\nxopen_demo\code\ch5_1”),删除原有内容再添加下列代码:


(2)编译链接生成*.dll文件,并将该文件拷贝到NX二次开发根目录下的application目录中。
(3)打开“%UGII_BASE_DIR%\UGII\ugii_env_ug.dat”文件,添加并配置环境变量如图5-1所示(以“#”开头的行表示该行被注释。也可以直接在计算机上设置环境变量)。

图5-1 配置环境变量USER_FILE
(4)重新启动NX,单击“File”→“New”按钮,启动新建文件工具,再单击所弹出对话框中的“OK”按钮以默认文件名创建部件。
(5)单击“File”→“Save”→“Save”按钮,启动保存部件工具,此时系统弹出“Name Parts”对话框,单击“OK”按钮尝试保存该部件。系统弹出消息框,提示用户“部件名必须含有NXOpen”,如图5-2所示,且该部件未被保存。

图5-2 保存部件显示消息框结果
(6)再次单击“File”→“New”按钮,启动新建文件工具,在弹出对话框中的“Name”文本框中输入“test_name_NXOpen”,再单击“OK”按钮新建部件。
(7)再次单击“File”→“Save”→“Save”按钮,启动保存部件工具,此时部件被成功保存在指定的位置。
如果要取消该用户出口,只需要注释或删除环境变量USER_FILE即可。