一、前言
本人在最近课题研究之中需要对UG进行开发,实现建模的自动化操作,来验证理论模型。UG提供了强大的API接口模板以供使用者进行二次开发,其中包含VB/C/C++等语言,本文主要用C++对UG进行二次开发。在开发之前需要对二次开发环境进行搭建。本文仅用于经验分享,也欢迎大家前来交流~
二、开发环境搭建
2.1 准备工作
在电脑中提前安装好UG和Visual Studio。本文以Visual Studio 2019 和UG12.0为例。
2.2 配置步骤
废话不多说,我们直接开始配置二次开发环境:
(1)复制UG安装目录中UGOPEN/vs_files文件夹中的VB、VC、VC#
三个文件。
(2)粘贴至Visual studio安装目录中。注意:Visual studio根目录本身就存在VB、VC、VC#
三个文件,直接粘贴合并即可
(3)复制UG安装目录中UGOPEN/vs_files文件夹中的VC
文件,粘贴至
Visual studio安装目录Commons7/IDE文件夹中。
此步操作的目的是:在进行第2步操作之后,打开Visual studio创建新项目时只有C#和VB两个模板。而真正的VC文件位于Visual studio安装目录Commons7/IDE文件夹中。
(4)将第2步和第3步中分别对应的 VC\vcprojects
文件夹
中的NX11_NXOpenCPP.vsz
和NX11_Open.vsz
进行版本号修改。这里2019版本号用16.0即可。
(5)创建C++项目
出现此向导证明创建成功
补充说明:发生脚本错误处理方法
如果在创建C++模板时出现如上脚本错误,按照如下步骤解决:
打开D:\Visual_studio_RD\VC\VCWizards\NX12_NXOpenCPP\html\1033路径。
依次在三个文件中:把strURL += "1033";这一行注释掉,把它上一行strURL += window.external.GetHostLocale();取消注释。然后查找下一个1033,做同样的修改。每个.htm文件都有两处需要修改。如果是2019版本,则这两行均不要注释(\\)。
再将D:\Visual_studio_RD\VC\VCWizards\NX12_NXOpenCPP\html\1033里面的三个.htm文件做同样的修改,然后打开Visual Studio就可以正常地创建向导了!
(6)环境变量配置
添加环境变量的目的是:NX在启动后会自动加载我们设置的用户目录,读取里面的菜单文件和动态链接库文件等,从而实现二次开发的功能。
在自己常用的盘中创建名为UGOPEN的文件夹,本文实在D盘创建的,位置可根据自己使用方便进行随意创建。
在
NXOPEN
下再新建 startup
和 application
两个文件夹。startup
文件夹用来存放菜单文件,application
文件夹用来存放对话框文件.dlx
和动态链接库文件.dll。
在此电脑上右键 -> 属性 -> 高级系统设置 -> 高级 -> 环境变量 -> 新建系统变量,变量名设为UGII_USER_DIR
,变量值设为刚刚新建的那个文件夹,我这里是D:\UG_VS_OPEN_RD\UGOPEN
,然后点击确定,环境变量就添加好了。
添加环境变量后打开UG安装根目录中UGLL\menus文件夹中的custom_durs.dat文件。
在文件末尾加入环境变量:UGII_USER_DIR=D:\UG_VS_OPEN_RD\UGOPEN
此步的目的是为了用menuscript脚本创建工具菜单栏。
至此开发环境已配置好
三、开发环境测试
新建一个模型,用以测试开发环境。
3.1 菜单创建
菜单脚本文件的扩展名为:*.men(文本文件)
在startup内创建一个后缀为.men的文本文件,根据一定的关键词编写menuscript脚本,例如:
VERSION 139
EDIT UG_GATEWAY_MAIN_MENUBAR
BEFORE UG_HELP (指菜单在HELP之前)
CASCADE_BUTTON MYMENU (定义一个下拉菜单的按钮名称)
LABEL mymenutest (显示的按钮名字)
END_OF_BEFORE
MENU MYMENU (在菜单内添加子功能按钮)
BUTTON FUN1
LABEL fun1(子按钮名)
BITMAP fun1.bmp (子按钮图标,非必须)
ACTIONS fun1.py(子按钮 执行文件)
END_OF_MENU
打开UG即可在菜单栏中看到自己定义的菜单栏,如果没有显示,重启电脑即可。
3.2 自定义工具条创建
工具条脚本文件的扩展名为:*.tbr(文本文件)
自定义工具条按钮的方法与菜单基本相同,首先在startup文件夹内创建后缀.tbr的文本文件,写入如下类似的代码
TITLE MYFUNC
VERSION 170
DOCK TOP
BUTTON FUN1
LABEL fun1(子按钮名)
BITMAP fun1.bmp (子按钮图标,非必须)
ACTION fun1.py(子按钮 执行文件,注意是action没有s)
3.3 功能文件生成
①创建一个C++模板项目:
do_it()函数是UG公开的的二次开发接口,只需在其中添加相应功能,然后生成.dll文件放入application文件夹中进行调用即可。
测试代码如下:
首先添加头文件:#include <uf_modl_primitives.h>
void MyClass::do_it()
{
// TODO: add your code here
UF_initialize();
double origin[3] = { 0.0, 0.0, 0.0 };
char* edge_len[3] = { "40", "60", "80" };
tag_t blk_obj_id = NULL_TAG;
UF_MODL_create_block1(UF_NULLSIGN, origin, edge_len, &blk_obj_id);
UF_terminate();
}
②生成解决方案
生成解决方案后,在刚才创建的C++项目目录中的×64\Debug文件中会生成一个dill文件。将该文件复制进application文件夹内。
注意:如果生成解决方案时出现以下错误,是因为你所编辑代码需要调用该库才能执行。
MFC库安装方法:
打开Visual studio 2019安装包,以管理员身份运行下面程序。
打开后点击修改
在使用C++的桌面开发中勾选适用于最新v142生成工具的C++MFC,然后点击修改即可。
其它库也是一样的安装方法。
3.4 功能测试
UG二次开发逻辑为:在startup文件中创建菜单栏或工具条,在menuscript脚本中给对应按钮添加执行文件链接。从而调用该程序实现二次开发功能。而需要执行的文件则放在application文件夹内。
新建一个UG模型,点击添加执行文件链接的按钮,即可执行二次开发功能。
至此已完成所有二次开发环境的搭建和功能测试~