不是美女 |
2008-10-23 11:53 |
基于Pro/E平台的工程图纸自动化生成软件的开发
一、前言 L-vy,[9)[* cjp
H
hoW Pro/ENGINEER是美国参数技术公司(PTC)研制的三维CAD/CAM软件,TOOLKIT是PTC专门提供的一个二次开发工具。在TOOLKIT中,PTC向用户提供了大型的C语言函数库,通过调用这些底层函数,用户能方便而又安全地访问Pro/ENGINEER的数据库及内部应用程序,进行二次开发,扩展一些特定功能。 >}Fe9Y.o r+ k5Bk' 作为一种成功的三维CAD/CAM软件,Pro/ENGINEER已经包含了比较高效的出图模块,可以适用于任何形状的零件出图任务,但是,对于一些零件较为类似、几何外形接近的出图要求来说,将大量的时间花在重复布置视图、标记尺寸上,是得不偿失的。在Pro/ENGINEER已有的出图模块基础上进行二次开发,则更适合此类情况。 6o!+E@V
b {p-&8- 目前,在很多设计部门中所设计的产品有一定相关性,这就使得很多设计过程存在重复劳动的问题。基于这种原因,在Pro/ENGINEER2000i2基础上,作者参与开发了一个较为完整的轴类零件设计(三维模型)、零件出图、零件加工(加工刀轨代码生成)系统,让一些通用的设计过程实现自动处理,以减轻设计人员的工作量(本文仅着重讨论其中的零件出图部分)。对于零件设计,该系统采用较为简单的族表方法(即预先手工构建产品模型,把它作为族表的类属件,然后在族表中定义各个控制参数来控制模型的形状大小,并在程序中通过改变各个参数的值来得到所需要的衍生件)。对于零件出图部分的程序设计,就可以十分方便地根据前面零件设计中定义的参数名称来获得相应的轴类零件形状及尺寸信息。 +O2T% n](Q)h'nlo 二、视图生成方法分析 )BmK'H+l 1UT&kD!si 1.图纸区域划分 a;8q7nC DavpjwSn 为了避免在图纸自动生成的过程中产生视图间干涉、尺寸重叠等现象,可以事先按要求将图纸划分出特定区域。对于结构较为相似、几何外形不太复杂的轴类零件,可以将整个图纸分成主视图区、剖面图区、表格区及注释区。然后根据所确定的区域大小及位置,调节视图比例,生成较为合理的视图。这样就可避免图纸上视图及尺寸间的位置冲突。 M |6l ,p {|f}0 2.生成主视图及剖面图 h`;w/+/Zr V]&0"HX2r! 生成视图的关键是确定视图方向以及视图的比例。对于视图方向,如果方向选择错误,则无法正确表达零件的形状。在TOOLKIT提供的生成主视图(General View)的函数中,可以通过输入不同的方向矩阵(Orientation Matrix)来调整视图方向。对于视图比例,选择恰当的比例系数,可以使视图尽可能表达清楚,又不会造成越界,产生区域干涉。 #| ETH;HM ~QQi{92 对于轴类零件,由于特定的外形特征,在生成图纸时除了主视图外还需生成各键槽处的剖视图。通过调用TOOLKIT提供的视图生成函数ProDrawingGeneral *#\da]"{ tUaDwIu# viewCreate(),可以方便地生成需要的视图(需要注意:在零件模型设计阶段就确定恰当的默认参考平面,这样可以在出图阶段忽略考虑方向的问题,即方向矩阵可用单位矩阵代替;视图比例先默认为1:1)。在此基础上,调用TOOLKIT提供的视图轮廓提取函数ProDrawingViewOutlineGet(),计算此视图的轮廓大小,再根据事先划分好的区域大小,重新设定视图比例,自动生成大小合适的视图。 N D`?T
&PK ^Cs?FF@P 3.视图生成实例及程序 3+ JkV\AF q&]I 在这个实例中,根据已生成的轴模型实体(axis.part),采用C语言编程,调用TOOLKIT提供的视图生成及调整函数,生成符合要求的图纸,并在此之上生成视图。程序如下: %a$ l%8j& )!+~q!A ProSolid solid; $qO%lJ: ^M_0M int sheet; 8&t3a+8l > yk2 ProMdlCurrentGet(&solid);//获得内存中打开的轴模型 mO%F {' ;n`SF~CU ProStringToWstring(wroot, “drawing”); %PW_v~sg x/7kcj!O ProObjectwindowCreate(wroot,PRO_DRAWING,&w_id);//打开名为drawing的空视图窗口 :|%k*z i-Er|u; W ProDrawingCurrentSheetSet(drawing, sheet);//设置当前图层 }g&A=u_2 R+}7]tva6C ProDrawingSolidAdd(drawing, solid);//将获得的轴模型加入当前窗口 F5s Pd f2ea|l ProWindowActivate(w_id);//激活当前窗口 p(vmMWR! )jc`_{PQg ProDrawingGeneralviewCreate(drawing,solid,sheet,0,pos,scale,matrix,&view); //在当前图层上生成视图,其中比例大小scale=1.0,方向矩阵matrix为3Χ3单位矩阵 Pk)>@F< 'ONCz ProDrawingViewOutlineGet(drawing,view,outline);//获得视图轮廓大小 bYt[/K, #s%_ L ……………. Fp=O:] &p | |