关键字:CAD二次开发特征建模
TheKeyTechnologyAboutApplicationDevelopmentOfPro/E
Abstract:BasedontheresearchoftheapplicationdevelopmentinPro/E,thepaperpresentsaautomaticfeaturemodelingmethodbyPro/Toolkit.ItdescribestheimplementofinformationtransformationmechanismininterfaceswithDLLandbasicclasslibraries,andshowstheexampleofthesystem.
Keywords:CAD;ApplicationDevelopment;FeatureModel
1引言
自动建模指面对特定的产品,根据用户输入的参数或根据运用CAD系统进行设计产生的数据结果,系统应能动态地、自动地将模型建造出来,本文称这种技术为程序自动建模。Pro/E是一种采用了特征建模技术,基于统一数据库的参数化的通用CAD系统。利用它提供的二次开发工具Pro/TOOLKIT,在Pro/E的基础上进行二次开发,可以比较方便地实现面向特定产品的程序自动建模功能,并且可以把较为丰富的非几何特征如材料特征、精度特征加入所产生的模型中,所有信息存入统一的数据库,是实现CAD/CAE/CAM集成的关键技术之一。本文分别对几何特征和非几何特征的程序自动建模技术进行论述。
CAD系统要和其它系统集成往往需要通用数据库接口。然而直到20版的Pro/TOOLKIT仍没有提供数据库编程接口。另外,弹出式对话框是目前最先进最流行的一种人机交互界面,能向用户提供图形与文字共存的可视化环境,使操作更为自然、简便和快速,但Pro/TOOLKIT只提供下拉式菜单(包括菜单栏标题及其菜单项)的编程接口,而没有提供开发对话框的编程接口。本文研究并开发了Pro/TOOLKIT与MFC的接口,利用MFC强大的功能实现对话框的开发与数据库的访问。
2几何特征的程序自动建模方法分析
对于几何特征的程序自动建模,Pro/TOOLKIT提供了以下三种方法来实现:
2.1特征描述
每一个特征由不同的特征元素树(featureelementtree)来定义。在程序中对每个特征元素树的全部变量赋值一次,就可以产生一个特征,多个特征的积累就形成产品模型。特征元素树包含的信息分为四类[1]:
(1)特征本身的所有选项和属性。如特征类型名称、隆起或切槽特征等的深度计量方式、孔的放置方式等。
(2)特征与已存在的几何实体的参考关系。
(3)用于构造特征的平面图形的起始位置。
(4)所有的尺寸值。
目前这种方法还不成熟,因为它有以下三个缺点:
(1)要由程序产生模型,程序必须包含产品模型的所有信息,从底层起由程序构建模型,编程量十分大。
(2)因为每种特征由不同的特征元素树来描述,所以编程难度大而且所编程序非常难于理解。
(3)并不是所有的特征都可以用这种方法产生[1]。
2.2族表
这种方法的步骤是:预先手工构建产品模型,把它作为族表的类属件(genericpart),然后在族表中定义各个控制参数来控制模型的形状大小,这样就可在程序中通过改变各个参数的值来得到所需要的衍生件。这个衍生件的产生是独立存在的,不需要为它定义参考基准。
2.3用户定义特征
与族表法相同之处是同样要预先手工构建产品模型。模型创建后定义要包含的几何特征、参考基准、可变尺寸以及可变尺寸的记号(symbol),然后将这些信息存为一个后缀为gph的文件。这样就可以在程序中通过这个文件来改变可变尺寸,产生所需的衍生件。与族表法不同的是,这种方法所编的程序过程与手工建模过程比较相似,因而易于理解且编程较易,因而在本文着重探讨运用这种方法的技巧。
3非几何特征的附加
运用Pro/TOOLKIT提供的库函数,可以十分方便地将一些非几何特征包括材料特征以及精度特征附加到已建模型中。
要由程序自动地设置材料特征,较为方便直观的办法是先在pro/e界面上手工编辑多个材料文件,输入它所要求的各种参数值(例如密度、泊松率等),并存为后缀为mat的文件。所输入参数的格式不限,因为存盘后pro/e会自动将参数格式转化为它规定的格式。定义好材料文件后,就可以在程序中将多种材料特征赋给产品模型,并设定其中一种材料为模型的当前使用材料。材料特征信息与产品模型的其它特征信息存于同一数据库中,而模型的当前使用材料的各种参数将在该产品的分析
计算中自动被使用[1]。精度特征的附加不需要先产生辅助文件,只需用Pro/TOOLKIT提供的库函数(如ProGtolCreate()等)即可实现。
4. 自动特征建模实例
在这个实例中,将利用用户定义特征的方法,用C语言编程,产生一个以缺省座标平面为参考基准的冲头模型,并加入精度特征和材料特征。事实上,只需修改此程序的可变尺寸赋值语句、用户定义特征文件名和材料文件名的给定语句,就能成为其它模型的自动建模函数。
(1)按上面所说的方法先手工构建一任意尺寸的长方体并在头部倒圆角形成冲头模型,按上述方法制作用户定义特征文件(文件名为 “punch.gph”)。冲头模型所包含的几何特征为隆起和圆角,参考基准为缺省座标平面,将长、宽、高和圆角半径定义为可变尺寸,它们的记号分别定为 “length”、“width”、“height”和“rp”。
(2)以下为冲头模型的程序自动建模函数,这个程序可以动态地根据不同的长、宽、高和圆角的输入值,动态地、自动地构造出冲头模型,并在Pro/E窗口中显示出来。
int three_dim_construct(h , l , w, rp) //l、w、h、rp为长、宽、高、冲头圆角尺寸
double h , l , w , rp ;
{ProMdlCurrentGet(&p_model); / /用户定义特征文件名的给定
ProStringToWstring (data.name, “punch.gph”); / /可变尺寸的赋值
data.n_var_dims = 4;
data.var_dims=(Pro_udf_var_dim*)calloc(4, izeof(Pro_udf_var_dim));
ProStringToWstring (data.var_dims[0].name, "length");
data.var_dims[0].type = PROUDFVAR_DIM;
data.var_dims[0].value = l ;
… …//依次对长、宽、高、冲头圆角尺寸(即l、w、h、rp)进行赋值
data.n_references=3;
data.references=(Pro_udf_reference*)calloc(3, sizeof(Pro_udf_reference));
data.references[0].ref_ptr = NULL;
… … //指明参考基准为三个缺省座标平面
data.references[0].ref_id = 1;
… …//缺省座标平面的标识为1、3、5
data.n_orientations=2;
data.orientations=(Pro_udf_ref_orient*)calloc(2, sizeof(Pro_udf_ref_orient));
data.orientations[0]=PROUDF_REF_NO_FLIP;
… …//接受缺省的建模方向
data.n_quadrants=0;
data.dependency=PROUDFDEP_INDEPENDENT;//所建模型相互独立
data.scale_type=PROUDFSCALE_SAME_SIZE; //单位不同时以等量尺寸构造模型
data.dim_display=PROUDFDIM_BLANK; //隐藏不可变尺寸
prodb_create_group(p_model,&data,NULL,NULL,0); //根据上面所赋信息构建模型
ProMdlCurrentGet(&p_model1);//获得所建模型的句柄(Handle)
prodb_set_tol_value(p_model,PRO_LINEAR_TOLERANCE,1,0.15); //附加精度特征,可使用变量赋值
ProStringToWstring(material_name, "Fe.mat");
ProMaterialfileRead(p_model1, material_name); //附加材料特征,可使用变量赋值
ProWindowRepaint(PRO_VALUE_UNUSED); //刷新屏幕使所建模型显示出来
Return 0 ;
}
5. Pro/E与MFC的接口开发
从本质上说,Pro/E与MFC的接口就是Pro/E系统调用MFC应用程序的途径。本文研究并开发一个Pro/TOOLKIT应用程序来实现该接口。Pro/E系统、Pro/TOOLKIT应用程序与MFC应用程序的通信方式是接口实现的关键之一。本文提出采用动态链接库(DLL)方式实现三者之间的通信。因为通信是通过直接的函数调用实现的,所以有执行速度快的优点。接口方案如图1所示。
Pro/E系统 |
Pro/TOOLKIT程序 (A. dll) |
MFC应用程序(B. dll) |
DLL方式 |
DLL方式 |
|
图1 接口实现方案
具体实现的方法如下(编译器使用VC++6.0):
(1)使用CWinApp类来生成第一个DLL工程(简称A. dll),工程类型选用共享MFC的常规DLL(Regular DLL using shared MFC DLL)选项。然后在此工程中加入Pro/TOOLKIT程序,主要是函数user_initialize()的代码。
(2) 使用同样的方法与选项生成第二个DLL工程(简称B. dll),并在此工程中用类向导(ClassWizard)和资源编辑器(Resource Edit)生成所需要的MFC类(如对话框类、数据库类等),并定义一个函数完成该类的初始化。
(3) 使A. dll中的Pro/TOOLKIT程序调用B. dll的导出函数(如图2中的loaddlg()函数),
这是接口实现的关键。
(4) 加入Pro/TOOLKIT程序所用到的库(如protk_dll.lib、protoolkit.lib、prodev_dll.lib、B\Debug\B.lib、pt_asynchronous.lib等等),并指出其路径,且设为强制输出(即使用/force选项),使用MFC的编译选项对这两个工程进行编译。生成新的 A.dll与B.dll。
(5)在 Pro/E中用DLL方式加载Pro/TOOLKIT程序(即A. dll),再通过Pro/TOOLKIT程序调用MFC应用程序(即B. dll)。
A. dll int user_initialize() { CSCW_Init(); … … } … … extern "C" int CSCW_Init() { return loaddlg (); } | B. dll … … __declspec( dllexport ) int loaddlg () { AFX_MANAGE_STATE(AfxGetStaticModuleState()); CDLG DLG; DLG..DoModal(); return 0; } |
图2 Pro/E与MFC的接口程序的关键
6 结论
(1)运用Pro/E提供的二次开发工具Pro/TOOLKIT可以比较容易地实现由程序动态地、自动地进行特征建模的功能,并且所建模型能由程序自动加入较为丰富的非几何特征,并存入模型统一的数据库、特征库中,为CAD/CAM/CAE/CAPP系统的集成打下良好基础。
(2)由于用户定义特征的方法适用于所有的模型的程序自动建模,所以本文的实例所用的方法和程序对于其它所有的产品模型有很大的借鉴意义。
(3)本文研究并开发的Pro/E与MFC的接口,突破了Pro/TOOLKIT的局限,克服了在Pro/E上进行二次开发的技术难题。
(4)运用以上两种技术在Pro/E上进行二次开发,开发出的模具CAD软件既有Pro/E强大的特征建模功能,又能使用MFC制作出图文并茂的用户界面以及实现多种数据库访问功能。
参考文献
[1] Pro/TOOLKIT User's Guide. USA:PTC公司出版 1998年
[2] David等著 Visual C++ 6.0 技术内幕 北京希望电子出版社 1998年