关于UG的接口技术研究
关键字:Open API;MFC;接口技术;二次开发
随着市场竞争愈来愈激烈,在现代制造业中,缩短产品设计开发周期,实现快速设计显得越来越重要。UG (Unigraphics)软件是大型CAD/CAM/cAE集成软件之一,功能强大,具有开放的UG/Open二次开发工具。作者在Visual C++6.0的集成开发环境下,通过直接在MFC应用向导程序中加人UG的入口函数的方法,解决了利用MenuScript菜单或uI—Styler的回调函数无法直接调用MFC函数的问题。给出UG/Open API与高级用户接口语言MFC (MicrosoftFoundament Class)编程相结合进行开发的接口实现方案,采用MFC来设计对话框界面的编程技术,为开发Windows应用程序提供了强大的支持,使用MFC可以充分利用VC++开发环境提供的先进技术工具,实现程序界面的可视化设计。通过修改界面上的关键参数或直接访问数据库便可以实现零件的参数化建模。极大地提高了开发效率,对提高产品的研发速度具有重要意义。 1 UG二次开发接口技术 1.1 UG应用程序开发技术 UG/Open是UG软件为用户提供的最主要的开发工具。它主要由UG/Open API、GRIP、MenuScript和UIStyler 4个部分组成。UG/Open API(又称USERFuncTION)是一个允许程序访问和影响UG对象模型的一系列程序集,它封装了近2000个UG操作的函数,还提供了编译和连接程序的工具?。API函数使用C/C++作为编程语言,几乎能实现UG的所有功能。 UG应用开发程序采用了动态链接库(DLL)技术,其调用过程如图1所示。在Visualc++6.0环境中为UG软件进行应用程序的开发提供了3种工程向导:UG/Open App—W iz~d、W in32 Dynamic—}LinLibrary和MFC Wizard(DLL)。 这些应用向导最终将创建一个动态链接库文件供UG进程使用。
(1)UG/Open AppWizard 该向导是UG软件本身提供的应用向导,操作简便,运行稳定,可以快速构建开发框架,但通常不支持MFC类库。 (2)Win32 Dynamic-Link Library 该向导创建Windows常规DLL,基本操作是打开VC++,选择菜单命令File---~New,在弹出的New对话框中选择Win32 Dynamic.Hnk Library选项便可完成创建过程。但此向导只能导出c样式函数,不能导出c++类、成员函数和重载函数,不支持MFC类库。 (3)MFC AppWizard(DLL) 该向导创建的动态链接库(dl1),可以方便地调用MFC类库中丰富的资源。MFC封装了WIN32 API函数,并设计了一套方便的消息映射机制。MFC的界面灵活性和表达能力均优于UISyler的功能,有效灵活的MFC框架结构大大方便了开发者编程,可以实现与数据库进行通信,有效解决了UG/Open提供的工具及对话框所包含的控件较少、界面开发功能差及无法实现对数据库的访问的问题。 1.2 接口技术方案 在Visual C++6.0环境中为UG提供的3种工程应用向导中,只有使用UG/Open AppWizard生成的DLL文件(又叫UFUN DLL)可以直接被UG调用。 但使用UG/Open AppWizard向导创建的应用程序本身不支持MFC,不能直接调用MFC的应用程序,实现与MFC的通信,特别是与数据库的连接。由于UG本身可以通过动态链接库(DLL)实现UG系统内的图形界面与系统内部的通信,而且通过动态链接库(DLL)方式的执行速度快 。 接口实现方案如图2所示。通过DLL嵌入的方式实现UG与MFC集成和运行,利用MFC实现与数据库通信,并可以直接使用MFC丰富的函数资源。 UG软件为用户提供的二次开发工具不但可以独立使用,而且可以通过接口相互调用,这不但扩展了工具本身所具有的功能,还方便用户进行二次开发。 MenuScript用于菜单的开发,UIStyler则主要用于开发实现用户界面接口交互操作的对话框。
MenuScript开发的菜单可以与UIStyler开发的对话框相互调用,UG/Open API程序可以被Menu.Script、UIStyler开发的对话框调用,但却无法实现直接调用MFC函数及所生成的DLL程序 。因此,需要通过间接的方法来实现。通过描述的方法,将提供的App和Main文件修改后加入创建的工程,可以实现使用UG的MenuScript菜单调用MFC函数的方法,但此方法是通过加入响应菜单响应函数来实现对DLL的调用,不能调用多个DLL文件,而且操作烦琐。因此,通过实践研究探索出另外一种实现UG与MFC接口函数相互调用的方法,即通过在创建的MFC AppWizard(dU)工程序文件的$.CPP文件中加人以下代码即可。这种方法生成的DLL可以利用MenuScript菜单脚本语言的ACTIONS或UIStyler的回调函数直接调用。 其中,代码中的IDD—NEWDLG为所创建的Win.dows风格对话框的ID,CNewDlg为所创建的对话框类。与UIStyler对话框相比,使用MFC的对话框中布局更为容易,修改调试更为方便。通过MFC接口不但可以实现数据通信功能,还可以实现对数据库访问的功能。
2 接口实现过程 二次开发前首先要设置环境变量,设置环境变量的目的是使UG能找到开发的可执行程序的入口,并在启动UG的时候加载必要的信息。UG提供了两种设置环境变量的方法,一种是注册工程路径法,即将用户工程路径注册到文件customs—dIRs.dat(该文件位于${UGII—BASE—DIR}\UG\menus文件夹下)。 另一种比较简单并且适合一般开发用户的设置方法如下:右键点击我的电脑一属性一高级一环境变量,新建一个UG_USER—DIR环境变量,并将环境变量的值设置为建立Application和Startup两个目录所在的文件夹的路径,这两个文件夹分别用来存放dll和菜单文件%.men 。具体实现过程如下: (1)在Visual C++6.0的应用程序创建向导中选择MFC AppWizard(dl1),并选择应用程序类型为Regular DLL using shared MFC DLL。 (2)设置UG应用开发环境。在Project—Setting---~Link中,Object/library modules文本框中加入UG库文件libufun.1ib和libugopenint.1ib。 (3)配置路径选项,选择Tools--~Options,选择Directoris选项卡,分别在Library Files和Include Files中添加UG根目录下UGOPEN文件夹所在的路径。 (4)编制程序,在应用程序中添加UG的人口函数ufsta(),即将前面的代码加入即可。 (5)建立MFC对话框并添加调用MFC函数。选择菜单命令Insert---~Resource,在Resource对话框中选择Dialog,就可以创建Windows风格对话框。 (6)在VC++中添加实现代码编译连接后生成动态连接库文件(:一c.dl1),打开UG,选择File—Ex—ecute UG/Open--*User Function,在Execute User Func—tion对话框中选择该DLL文件;或者通过MenuScript编辑的菜单和工具条调用。 3 实例分析 二维参数化程序设计可以采用程序自动生成工程图的方式实现,但在零件的三维设计中,由于三维模型的创建涉及到基准实体等特征,直接利用程序生成三维模型非常困难。实例采用三维模型与程序控制相结合的方式,先利用交互的方式生成零件的三维模型,再根据设计要求建立一组完全控制三维模型的关键设计参数,通过程序设计对设计参数进行编程,实现设计参数的检索、修改和根据新的参数值生成新的三维模型的功能。 图3所示为用户定制的MenuSeript菜单界面。布线系统菜单下“连接器库”和“自动布线” 按钮的回调函数均为已编译好的application文件夹下下的DLL文件,后面的3个点表示单击后会弹出一个对话框,而Ctrl+1或Ctrl+2表示此菜单的快捷键。如在UG的主菜单上点击“布线系统” 按钮再按下Ctrl+1快捷键就会运行相应的DLL程序。 实例实现了整机布线模型中线夹的参数化设计。 如图4所示为由MFC生成Windows风格的线夹模型对话框,输入相应尺寸,单击“生成”按钮,就可以生成线夹的三维参数化实体模型,“修改”按钮将按照用户输入的参数值更新并保存模型的参数。实例解决了UG二次开发应用程序向导不能调用MFC的接口问题,实现DLL程序与UG的集成,并通过参数化驱动的方式实现了线夹的三维参数化建模。 4 结束语 在研究UG二次开发接口技术的基础上,给出了二次开发接口实现方案。解决了利用MenuScript菜单和UIStyler的回调函数无法直接调用MFC函数的问题,实现了DLL程序与UG的集成。开发人员可以充分发挥VC++及MFC库类函数的强大的功能,借助VC++中面向对象的思想,开发功能强大的应用程序,例如可以利用Windows消息机制编写更复杂的界面,利用ADO访问数据库,还可以调用VC++中ActiveX控件、Intemet控件等。使用该方法进行二次开发具有速度快、方便简单、界面统一、良好的人机交互能力、功能强大和编程容易等特点。有效地提高UG软件的二次开发效率,使UG二次开发的应用领域更加广阔。
|