王思远,贺成柱
(甘肃省机械科学研究院,甘肃省机械产品检测与技术评价重点实验室,甘肃 兰州 730030)
基于Pro/Toolkit的Pro/E工程图标注系统的二次开发研究
王思远,贺成柱
(甘肃省机械科学研究院,甘肃省机械产品检测与技术评价重点实验室,甘肃兰州730030)
针对Pro/E系统中工程图标注的繁琐难题,利用VC++技术和Pro/E二次开发工具包Pro/Toolkit,通过动态链接库方式对Pro/E中工程图的公差标注系统进行二次开发,并对菜单开发和MFC可视化对话框开发设计的关键技术进行了研究,实现了形位公差、尺寸公差标注符号类型和各参数的选择与输入,有助于用户在使用过程中能迅速、快捷、准确的完成工程图的标注。
Pro/E;Pro/Toolkit;公差标注;二次开发;VC++
Pro/ENGINEER(以下简称Pro/E)软件是由美国PTC公司开发并研制的一款三维设计软件,它将CAD/CAPP/CAM功能集于一体化,不仅具有“参数化、相关化”的特点,而且具有更加细致而强大的设计、分析、制造等功能,可以为工业产品的开发设计提供了一套完整的解决方案,因此,应用范围涉及到航空、机械设计、数控加工、有限元分析等诸多领域,当前Pro/E在我国的应用比较比较广泛。
一般产品的三维设计软件应具备快速反求的设计开发功能,系统的界面设计要更专业化、智能化、人性化,各个模块之间要无缝连接,以快速设计为最终开发的目标。在国内各大企业实际生产当中,二维工程图纸从产品的研发到装配过程中占据了重要的地位,它是产品设计与制造的技术核心,必须具备行业规范性和标准性,特别是工程图的二维标注标注符号、标题栏及其他标注信息等[1]。二维工程图在Pro/E环境下,其标注功能较为薄弱,并且有些标注方法与国际标准不相符。所以更多的企业提出了二次开发的需求,通过对Pro/E二次开发,不仅使软件具备了更高的实用性,而且能够提高产品的开发效率,这样以来大大缩短了产品的设计周期。这将使得企业和用户摆脱了二维工程图图纸上的重复繁琐的标注,在一定程度上提高了对工程图二维标注的处理能力。
本文针对形位公差国际化标注进行了一些研究,在Pro/E Wildfire 5.0的环境下,主要使用Pro/ Toolkit工具包。在VC++平台上利用MFC对话框的可视化技术开发了符合国际标准的形位公差符号标注功能,有效地解决了工程图中形位公差符号标注上的繁琐难题。
Pro/E自带的二次开发工具包包括Pro/Toolkit、J-link等。用户可以通过Pro/Toolkit工具包获得大量的C语言函数库。如果用户想要方便地访问Pro/ E的内部数据库及应用程序,可以通过调用最底层函数的方式来实现,企业或用户可以根据自己的需求进行二次开发,通过C程序代码来扩充Pro/E的其它所需要的功能。
Pro/Toolkit应用程序有两种工作模式:异步和同步模式。
1)异步模式:Pro/Toolkit应用程序可以在Pro/E系统关闭的状态下单独运行,这样就实现了两个程序的独立运行,Pro/E系统在需要调用Pro/E功能的时候再启动运行。异步模式的程序代码复杂并且运行速度比较慢,因此一般不采用异步模式。
2)同步模式:Pro/Toolkit应用程序与Pro/E系统必须同步运行,Pro/Toolkit应用程序在Pro/E系统关闭的状态下是无法运行的。同步模式又分为DLL模式和多进程模式,Pro/Toolkit应用程序集成到Pro/E系统中的标准方法就是DLL模式。考虑到Pro/ Toolkit应用程序的运行都在Pro/E系统里,所以一般采用同步模式。
Pro/Toolkit开发应用程序在使用过程中包括3个基本步骤:
1.1编写源文件
Pro/Toolkit应用程序整体上有3部分组成:头文件包含部分、用户初始化函数和用户结束中断函数部分。
头文件包含部分是指定应用程序所使用对象函数的原型文件,每个应用程序都必须包含的头文件是“Pro/Toolkit.h”否则在编译该文件时就会出现错误。
源文件包括:对话框源文件、菜单资源文件及程序源文件,其中程序源文件是要进行编写的C语言程序,它包括定义的菜单内容及动作,是整个二次开发的核心部分。
在同步模式下,Pro/Toolkit应用程序中必须包含这两个核心函数:初始化函数user_initializ(),该函数主要是用户用来设置需要添加的菜单,以及其他的一些初始值设置或直接调用所需的函数等;终止函数user_terminate(),该函数主要用来执行程序结束时的处理工作,如释放程序中全局变量的内存等。这两个函数都应该放在与工程文件名同名的cpp文件中。
1.2编译链接程序
程序代码编写完成后,就可以在VC++中编译链接Pro/Toolkit函数库和MFC(Microsoft
Foundation Classes)类库的程序,最终可生成在Pro/E中注册运行的DLL文件。Makefile文件在整个编译连接的过程中起着很重要的作用,其中包括:指定头文件、源文件、库文件的位置;生成可执行文件和动态连接库名称等。一般Makefile文件在用户开发一个VC项目时,就会在VC中自动生成并集成到VC环境中。因此,用户可以不用编写Makefile文件。
1.3注册运行Pro/Toolkit应用程序
编写一个文本文件的扩展名为.dat的文件作为注册文件,注册文件是向Pro/E提供应用程序的信息。Pro/Toolkit应用程序有两种注册方式:
1)自动注册的方式:第一种方式是将注册文件protk.dat保存在Pro/E安装目录的 ext目录,或者位于Pro/E起始位置设定的目录下,在运行Pro/E时,Pro/E将自动启动注册文件里的所有Pro/Toolkit应用程序。如果在注册文件设置DELAY_START的值为TRUE时,在启动Pro/E时Pro/Toolkit应用程序将自动运行,否则必须用手动来运行。第二种方式是在Pro/E的config.pro文件设定为注册文件但是系统的变量名必须为toolkit_registry_file。
2)手动注册方式:在Pro/E运行的界面上单击“工具”主菜单下的“辅助应用程序”子菜单,然后在弹出的对话框中选“注册”按钮,按路径选择所建立的protk.dat文件,注册成功后选择“启动”按钮运行程序。
注册文件编写格式如下:
2.1标注系统的二次开发流程
通过二次开发,Pro/E中形位公差标注的繁琐与不足得到了很好的改善,以交互的方式实现了直观友好的对话,从而达到快捷,准确的标注目标。形位公差国际标注系统的开发流程如图1所示。
图1 开发流程图
2.2菜单的编写技术
在Pro/E中,几乎所有的操作命令都是通过菜单或按钮来实现相应的操作,在Pro/E二次开发中,用户可以通过Pro/Toolkit,利用其提供的函数自定义拓展以及使用紧密结合的且操作起来方便的个性化菜单。一个完整的菜单编写代码里应包含两个
Pro/Toolkit函数:ProCmdActionAdd()和
ProMenubarmenuPushbuttonAdd()函数。
以下是本程序的菜单添加的相应函数设置∶
1)status=ProMenubarMenuAdd("CHECK"," CHECK","Utilities",PRO_B_TRUE,MsgFile);
此函数的功能是:在Pro/E界面上添加一个新的菜单。
2)ProCmdActionAdd("ShowTest1",(uiCmdCmdActFn)
UsrPlanesTol,uiCmdPrioDefault,AccessDefault,PRO_B_TRUE,PRO_B_TRUE,&cmd_id1);
此函数的功能是:设置Pro/E菜单项时所需要执行的动作函数,这个函数命令和按钮捆绑在一起。参数ShowTest1是动作命令名,但是动作命令名必须是唯一的;参数uiCmdPrioDefault是命令的优先级别,指该动作函数优先于向Pro/E里加的其它动作函数的等级;参数&cmd_id1是动作函数的命令标示号,在调用动作ProMenubarmenuPushbuttonAdd函数时作为作为输入参数。
3)ProMenubarmenuPushbuttonAdd("CHECK"," UsrPlanesTol","UsrPlanesTol","Active UsrPlanesTol menu",NULL,PRO_B_TRUE,cmd_id1,ProString-ToWstring(message_file,"message2.txt"))。
此函数的功能是:用来添加所需要的菜单按钮。参数UsrPlanesTol是菜单标签名,该值必须与信息文件中同组的标示关键字相同。
本文设计的菜单如图2所示:
图2 所添加的菜单
2.3MFC可视化对话框的创建技术
目前,人机交互界面最流行的一种方式为弹出式对话框,用户通过对话框对参数信息进行输入或显示数据,本文采用VisualC++的MFC可视化对话框技术来实现。MFC设计对话框技术通过面向对象的方法来调用API,并且提供了文档框架的视图和活动文档,这是优于UI对话框技术的一个关键作用,这样使用户可以根据自己的需求自定义应用程序框架,使得操作起来比较灵活、高效、修改和调试也简单。
对话框有两种类型:模式和无模式对话框,前者是激活当前对话框的条件下不能激活另外的对话框,只有关闭该对话框才能对其他对话框进行操作。后者恰恰相反,它是激活一个对话框的同时还可以激活另外的对话框,可以不关闭前一个对话框,但是前一个对话框处于非活动状态,这种模式的对话框使得操作起来没有更多的限制。
在Pro/E系统中调用MFC可视化对话框的关键问题就是要实现 Pro/TOOLKIT、Pro/E系统和MFC对话框三者之间的通信。因为Pro/TOOLKIT本??身并不支持对MFC可视化对话框开发设计,本文采用动态链接库 (DLL)方式来实现 Pro/T??OOLKIT与MFC之间的通信,同样??DLL方式也可以在Pro/E与Pro/TOOLKIT??之间相互通信。DLL的产生则由MFC根据Pro/TOOLKIT的环境要求设置后进行编程实现,应用程序功能就完全集成到DLL中,其中接口方案如下图3所示。
图3 二次开发接口的实现方案
本文按如下步骤,实现MFC对话框的开发设计[3]:
1)新建一个MFC DLL的项目。用AppWizard创Pro/T OOLKIT应用程序框架,在该项目文件里设置好头文件、库文件和项目的其它属性。
2)在该项目.cpp文件里内添加常用的头文件、初始化函数和终止函数,如果对话框需要Pro/E菜单项启动的话,就要在user_initializ()里添加菜单按钮函数和动作函数设置。
3)创建对话框资源。在VC++的集成环境里调整并设置对话框的布局等属性,如调整对话框大小、添加文本空间、选择控件等。
4)创建对话框类。对话框界面设计好之后就可以用ClassWizard创建一个对话框类。自动生成CDialog派生类定义的头文件Dlg.h和实现文件Dlg. cpp。
5)创建和显示对话框。设置好类的成员变量函数之后,就可以编写并实现每个函数功能的代码。
6)生成Pro/T OOLKIT应用程序。
下面给出了无模式对话框图4的部分编写代码:
图4 形位公差对话框
2.4外部数据库的访问
通常在Pro/E二次开发过程中,还需要与外界的数据库相连接,来实现相应的查询功能,由于Microsoft Access数据库具有使用性强、兼容性和通用性好等优点,因此采用Access数据库来创建公差数据库。在数据库与Pro/TOOLKIT应用程序之间的连接采用ADO(ActiveX Date Objects)方式。
ADO是一个面向对象的程序接口,也是存取数据源的COM组件的一部分,它提供了编程语言和数据访问方式OLE DB,不过OLE DB更加接近底层。ADO继承了早期微软的数据访问的对象层,包括RDO(Remote Data Objects)和DAO(Data Access Objects)。ADO库包含三个基本接口对象∶_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。本文采用的是_ConnectionPtr接口对象进行数据库之间的连接,用该对象进行对数据库的关闭打开和创建数据集的动作等。在使用之前,把“stdafx. h”文件加到下面的代码中:#import“c;program filescommon filessystemadomsado15.dll”re name_
namespace(“myado”)rename(“EOF”,”adoEOF”)主要是添加ADO系统所使用的相关组件及操作空间。
下面给出了部分连接实例程序代码如下:
形位公差的标注采用弹出式对话框的形式,用户可以选择相应的形位公差进行标注。部分标注的
所建立的对话框以及标注的结果如图5所示。
图5 工程图标注示例图
本文阐述了运用Pro/TOOLKIT结合VC++的 MFC的可视化优点实现了 Pro/E系统的二次开发——工程图的国际化标注。这是一款简单易用且符合国际的通用化标准插件的开发,最大限度地提高了Pro/E软件的使用效率,缩短了产品的开发周期,促进了CAD技术的发展。
[1]路强,费明浩,贾腾,等.基于Pro/TOOLKIT二次开发的二维工程图标注系统[J].拖拉机与农用运输车,2008,35(6)∶101-103.
[2]王文波.Pro/EWildfire4.0二次开发实例解析[M].北京∶清华大学出版社,2010.
[3]李世国.Pro/TOOLKIT程序设计[M].北京∶机械工业出版社,2003.
[4]张继春.Pro/E二次开发实用教程[M].北京∶北京大学出版社,2003.
[5]宋娥,李世国.Pro/E二次开发中的界面设计技术[J].机械设计与制造,2005.(5)∶56-58.
[6]卫大为,李健康.Pro/E二次开发的机械零件参数化设计[J].机械制造与研究,2004.33(6)21-24.
TH391.7;TP391.9