在CATIA零件设计模块,创建倒圆角特征,输入的几何元素类型只能是拓扑边线。比如已知一个立方体,想要在它的所有边线上倒圆角,则输入的边必须是(TriDimFeatEdge)。终端用户进行软件操作模式下,用户可以直接用鼠标选定需要倒圆角的边线,非常方便;但在CATIA VBA二次开发中如果想自动生成倒圆角,则边界的获取会遇到很大困难,我们想要通过 "拓扑边线的名称" 来获取相应的边界几乎是不可能的。
如下是我们给一个立方体倒圆角的对话框。
我们是通过鼠标点选实体表面的拓扑边线来获取输入对象的,十二条边线的名称如下所示,当倒角完成之后,我们删除倒角特征,重新获取这些边线再次进行倒角,我们发现,即便是前后对应的同一条边线,其名称也发生了变化。所以说想要以某一个实体表面的拓扑点,线,面的名称来获取相应的对象是不可行的。
我们可以将上述过程录制一段宏,录制的宏代码中对拓扑边线的解释如下,真实让人头大。
这个brep字符串就像天书,我哇哇大哭了出来。所以专业的vba程序中很少出现brep,这也是我们需要去避免的,事实是如果我们去录制了一段针对“拓扑点线面”对象的宏程序,程序中肯定会夹杂这些“神仙代码”, 然而也正是这些神仙代码大大的限制了VBA开发的发展和崛起。
Set reference2 = part1.CreateReferenceFromBRepName("REdge:(Edge:(Face:(Brp:(Pad.1;1);None:();Cf12:());Face:(Brp:(Pad.1;0:(Brp:(Sketch.1;1)));None:();Cf12:());None:(Limits1:();Limits2:());Cf12:());WithTemporaryBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR29)", pad1)
----- 解决 -----
然而也不是没有方法去解决这个“让人头大”的问题。想要选中正方体所有十二条拓扑边线,还有一种我们经常提到的方法,就是“Ctrl F” ,查找,我们可以通过查找命令来获取拓扑对象,而这个“神操作”往往是被“CATIA使用者”或者“二次开发”人员所忽略的。
对于CATIA软件的使用者,我们直接点击查找,打开如下对话框,做一下相应的设置。
点击查找,即可选中正方体所有十二条边线,然后点击零件设计工作台的倒圆角命令,所有被选中的边线会自动作为“要圆角化的对象”,我们轻轻点击一下“确定”,倒圆角任务完成。这种方法比一条一条的在实体表面点击要快几秒吧?
对于CATIA VBA程序二次开发,程序猿来说,完全可以基于以上操作逻辑来用程序执行“正方体倒圆角” 这一艰难而复杂的“高端操作”。首先通过代码将正方体所有十二条拓扑边线都选中,代码如下:然后对选中的边线依次倒圆角即可(For循环将每一条边线加入到要圆角化的对象当中进行处理)。
selection1.Search "Topology.CGMEdge,all"
完整程序代码如下,大家可以作为参考。代码很简单,意义很重大。嘘~
Sub CATMain() Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set shapeFactory1 = part1.ShapeFactory Set reference1 = part1.CreateReferenceFromName("") Set constRadEdgeFillet1 = shapeFactory1.AddNewSolidEdgeFilletWithConstantRadius(reference1, 0, 5#) Set bodies1 = part1.Bodies Set body1 = bodies1.Item("零件几何体") Set shapes1 = body1.Shapes Set pad1 = shapes1.Item(1) Set selection1 = partDocument1.Selection selection1.Search "Topology.CGMEdge,all" For i = 1 To selection1.Count Set oEdge = selection1.Item(i).Value constRadEdgeFillet1.AddObjectToFillet oEdge constRadEdgeFillet1.EdgePropagation = 1 Next part1.Update End Sub |