李如忠
(中国工程物理研究院 电子工程研究所,四川 绵阳 621900)
NX二次开发是在原来软件的基础上,结合具体的应用需求,总结行业的设计知识和经验,开发面向行业和设计流程的应用程序和工具。NX Open for.NET是西门子公司针对NX二次开发推出的基于微软.NET框架的开放式开发工具包,它可以使用.NET支持的任何语言进行开发,可以充分利用微软可视化.NET的开发环境,以及所有Visual Studio集成开发环境(IDE)的功能,所以,在 Windows平台上对NX进行二次开发,优先考虑使用NX Open for.NET开发工具包。该开发工具包既可以采用基于.NET的NX Open,也可以采用通过.NET类封装的Open API,Open API是NX早期基于C语言的二次开发工具包。NX Open for.NET支持任何面向对象的语言,如C++、VB.NET、C#、Java等,而C#是专门用于.NET开发的一种面向对象的语言,其是一种简单、现代、面向对象和类型非常安全的派生于C和C++的编程语言,其设计与现代开发工具的适应性比其他语言更高,同时C#具有Visual Basic的易用性、高性能以及C++的低级内存访问性。所以,在NX Open for.NET的开发中,C#应该是首选语言。
对于NX的二次开发一般是在NX基本功能的基础上增加输入、输出界面,使用编程的方式调用NX的基本功能函数完成多步或重复性的工作。二次开发的功能程序就是实现在NX中操作的主要功能的程序主体。NX Open for.NET提供了数千个函数封装在多个类中用于实现对NX的大部分操作,开发者不可能全部熟记这些函数的名称、功能等内容。而NX提供的Journal功能(操作记录工具)可以很好地解决这个问题,特别是NX Open for.NET的开发可以充分利用NX的操作记录工具。NX的操作记录工具把用户在NX界面上的操作以NX Open for.NET的代码组织形式进行记录,并且记录的语言可以选择C#、VB、Java等。在操作记录工具中还可以以解释性的方式执行C#的代码。
在录制操作记录时,先规划好操作顺序,以最简洁的方法完成NX界面下的操作,尽量使用可记录的操作。录制完成后,去除代码中一些无关的代码,比如旋转视图(函数名为ZoomAboutPoint)等代码,因为我们在编程批处理时不需要查看视图,从操作记录中找到需要的程序代码,复制到程序框架中。
NX Open for.NET的开发中可以利用的图形界面包括UI Styler对话框、Block UI Styler对话框、Windows Form窗体。
UI Styler对话框是用户开发NX对话框的可视化工具,不需要复杂的图形用户接口编程,对话框中的基本单元可以组合成不同的对话框,在对话框设计环境中可以自动生成代码模板文件,只需要编辑模板文件,补充回调函数代码。UI Styler对话框在启动时允许选择NX对象进行操作。
从NX6版本开始,NX引入了Block UI Styler对话框用户界面工具,Block UI Styler对话框与NX中系统的对话框具有相同的样式,都由一系列的“块”组成,自上而下堆叠而成。Block UI Styler对话框设计环境提供了几十种块可供选择,满足几乎所有的NX二次开发所需的界面,并且可以自动生成代码模板。因此,NX6版本以后的开发特别是NX Open for.NET的开发推荐使用Block UI Styler对话框。
由于NX Open for.NET是基于微软的.NET FrameWork的,所以,在NX Open for.NET的开发中可以直接使用.NET的Form窗体,Form窗体可以完成类似Windows的对话框界面,并且可以充分利用.NET FrameWork的资源。
NX Open提供了一个菜单脚本语言MenuScript,通过它用户可以使用脚本菜单文件(后缀“men”)来定制NX的菜单,为开发的应用程序添加相应的菜单,这些菜单包括图形窗口的主菜单和右键菜单以及工具条。菜单文件是一个纯文本文件,通过菜单文件中的脚本语言把菜单项与相应的响应链接起来。菜单脚本与菜单响应的编程语言和编程方式无关,菜单响应可以是NX Open的应用程序(后缀“dll”)、UI Styler对话框文件(后缀“dlg”)、NX Open Grip可运行文件(后缀“grp”)、通过菜单功能注册函数进行注册的用户定义的命令以及操作系统标准命令。
本实例实现的主要功能是从AutoCAD中拷贝一系列直线,通过二次开发程序实现在NX草图中粘贴直线,并根据参考平面标注尺寸约束。AutoCAD中拷贝直线功能是通过AutoCAD中的二次开发程序把直线数据以一定的格式保存到剪贴板中实现的,在本文不讨论。拷贝的直线位置数据都是选定基点的相对位置数据。在NX草图中粘贴直线时,首先要求用户选择一个基点,然后选择标注尺寸约束的垂直和水平参考平面,如果不选择参考平面则不标注尺寸,程序读取剪贴板中的数据,根据用户选择的基点计算直线的绝对坐标位置数据,生成直线并标注尺寸。
实例开发步骤如下:
(1)程序框架的生成:利用Visual Studio2008新建一个项目,项目类型选择Visual C#中的NXx Open C# Wizard模板,输入项目名称,选中Use NX Open.UF_API和 Use NX Open.UI_API选项,生成程序框架。
(2)功能程序主体的生成:功能程序主体主要是在草图中画直线和添加尺寸约束,功能程序主体可以利用NX的Journal(操作记录)工具生成。在NX中新建一个prt文件,新建草图,在NX中选择菜单工具→操作记录→录制,开始录制操作记录,在草图中插入多条直线,并标注水平和竖直尺寸约束。选择菜单工具→操作记录→停止录制,完成Journal的录制。打开刚录制的文件,可以从中选择以下代码作为功能程序的主体。
在上面的代码中,要进行如下几处修改才能作为该程序主体代码使用:①在建立直线函数中的输入参数为直线两点的坐标,要修改为我们需要的坐标作为参数输入;② 水平、竖直约束在程序中必须首先通过直线的坐标参数判断所建立的直线是否为水平或竖直,才能施加相应的约束;③在Journal中使用FindObject函数实现参考平面的选取,FindObject函数的输入是在本prt文件中对象的名称,在其他prt文件中对象的名称可能不同,不具有通用性,必须利用用户选择对象的函数实现参考平面的选取。
(3)用户界面的实现:使用Block UI Styler对话框实现用户界面,如图1所示。在用户界面下,提示用户选择基点和参考平面,在用户点击确定或应用时,程序开始在草图上生成直线并添加约束。
图1 用户界面对话框
(4)其他功能的实现:读取剪贴板中的数据是利用System.Windows.Forms.Clipboard类实现的,先用Clipboard.GetDataObject函数获取数据,用IdataObject接口获取指定格式的数据,再转换为MemoryStream格式的数据,从而转换为字节流数据。
(5)添加菜单和菜单回调函数:新建一个后缀为“men”的文本文件,加入下面的菜单脚本。利用UI.MenuBarManager.AddMenuAction函 数 添 加 菜单的回调函数,即添加我们所建立的如下过程函数:
在NX草图界面下,选择菜单“粘贴直线到草图”,如果剪贴板中无数据,给出提示后退出;如果剪贴板中有相关格式的数据,则出现图1所示的对话框,提示用户选择一个基点和两个参考平面,选择确定或应用,则在草图上添加相应直线和尺寸约束。
在.NET环境下利用NX Open for.NET进行NX的二次开发,可以充分利用NX的Journal功能生成大部分的代码,无需记忆复杂的函数名。本文通过实例说明了利用 NX/Journal、NX Open for.NET、NX/Open MenuScript联合进行NX二次开发,可以提高NX二次开发的效率。
[1]游安弼.用C#二次开发 UG NX[J].现代机械,2007(2):79-82.
[2]唐鑫辉..NET环境下利用 UG/NXOpen和 UG/Journal对 UG的二次开发[J].现代制造工程,2011(4):60-62.
[3]李如忠.利用二次开发技术在UG中实现剪贴板功能[J].现代机械,2008(6):63-64.