![Siemens NX二次开发](https://wfqqreader-1252317822.image.myqcloud.com/cover/979/41202979/b_41202979.jpg)
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()入口的方式
![](https://epubservercos.yuewen.com/A6F99C/21440188008281206/epubprivate/OEBPS/Images/32757_49_1.jpg?sign=1739318694-oVjJWitIuqhCy7XdQzkLIDKknvzt15s8-0-c52d7106a8a74f07a4bf864d3c66f9db)
5.1.2 ufsta()
在应用程序开发过程中,您可能期望NX在启动的时候就做一些工作,使用ufsta()这个出口可以解决这一需求,这个用户出口使用环境变量USER_STARTUP。此外,MenuScript和用户定义对象(User Defined Objects)也可以使用这个出口。
ufsta()的常规使用方法分为以下两步:
(1)在程序代码中使用下列格式
![](https://epubservercos.yuewen.com/A6F99C/21440188008281206/epubprivate/OEBPS/Images/32757_50_1.jpg?sign=1739318694-51Dh4tpN4dr65rWEP0v0xztdy0nibizc-0-f1f1371c4bed12b5b7f8a4a8ddc034d2)
(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 其他用户出口与环境变量
![](https://epubservercos.yuewen.com/A6F99C/21440188008281206/epubprivate/OEBPS/Images/32757_50_2.jpg?sign=1739318694-NLN9GjB9ZhGaGj4aSMRO5XMTuuVN2sJX-0-33ad416bb254213af2306328c68aa899)
续表
![](https://epubservercos.yuewen.com/A6F99C/21440188008281206/epubprivate/OEBPS/Images/32757_51_1.jpg?sign=1739318694-ncqqr7K314NJJ1Xtc3BcVIOKd7MXcDNW-0-c35b608744cd8443aeb0501c32ddd69d)
5.1.4 用户出口实例
本实例实现的功能为:在保存当前部件前,先检查部件的名称中是否包含了“NXOpen”字符串,如果包含该字符串就正常保存部件,如果未包含就提示用户。
利用用户出口的功能实现的步骤如下:
(1)启动Visual Studio,利用NXOpen C++Wizard创建一个名为ch5_1的项目(本例代码保存在“D:\nxopen_demo\code\ch5_1”),删除原有内容再添加下列代码:
![](https://epubservercos.yuewen.com/A6F99C/21440188008281206/epubprivate/OEBPS/Images/32757_51_2.jpg?sign=1739318694-LaSS2lXIa6W3GANLso7Y6JG8BUlb2tEY-0-32ceefa2d3b77120ca5a78f1d0d282c8)
![](https://epubservercos.yuewen.com/A6F99C/21440188008281206/epubprivate/OEBPS/Images/32757_52_1.jpg?sign=1739318694-82RrdWhgfBQolUP3oNXvwZXb2SfV8DRd-0-86eb38b9ede26e7504aa9e104d449b98)
(2)编译链接生成*.dll文件,并将该文件拷贝到NX二次开发根目录下的application目录中。
(3)打开“%UGII_BASE_DIR%\UGII\ugii_env_ug.dat”文件,添加并配置环境变量如图5-1所示(以“#”开头的行表示该行被注释。也可以直接在计算机上设置环境变量)。
![](https://epubservercos.yuewen.com/A6F99C/21440188008281206/epubprivate/OEBPS/Images/32757_52_2.jpg?sign=1739318694-jZR9odjwxN9qzwSuHIACl9ZRQLgteGOr-0-aeb1170443e39b38d6681e7177209349)
图5-1 配置环境变量USER_FILE
(4)重新启动NX,单击“File”→“New”按钮,启动新建文件工具,再单击所弹出对话框中的“OK”按钮以默认文件名创建部件。
(5)单击“File”→“Save”→“Save”按钮,启动保存部件工具,此时系统弹出“Name Parts”对话框,单击“OK”按钮尝试保存该部件。系统弹出消息框,提示用户“部件名必须含有NXOpen”,如图5-2所示,且该部件未被保存。
![](https://epubservercos.yuewen.com/A6F99C/21440188008281206/epubprivate/OEBPS/Images/32757_52_3.jpg?sign=1739318694-70Q7gKOcTzdsN6kUKuRDaoTr7HY9PyMm-0-e428fddc69718ed2f20454b28a232aa7)
图5-2 保存部件显示消息框结果
(6)再次单击“File”→“New”按钮,启动新建文件工具,在弹出对话框中的“Name”文本框中输入“test_name_NXOpen”,再单击“OK”按钮新建部件。
(7)再次单击“File”→“Save”→“Save”按钮,启动保存部件工具,此时部件被成功保存在指定的位置。
如果要取消该用户出口,只需要注释或删除环境变量USER_FILE即可。