文章转载自楼主本人的公众号“CATIA那点事儿”
欲撰此文必有因
最近,很多小伙伴在写VBA/宏代码时,都遇到了“测量”相关的问题。鉴于最近这个话题上榜率很高,小编决定写此文章,介绍一下如何用Automation中的Object实现测量这一功能!
在进行CATIA VBA二次开发时,需要测量的场景还是比较多的,例如:
代码测之何所异
首先可以肯定的是,CATIA Automation中是有测量相关的API的,它虽不能像手动点击测量命令那样,在特征树上生成一个“测量特征”,但可以实现同样测量的功能,更像是手动测量时,不勾选“Keep Measure”的效果。
持此许可方能行
测量相关的API,我们可以从Working with Space Analysis的Object中找到。
上述Object使用的前提,是需要我们有SPA这个许可证(用盗版的小伙伴就无所谓啦)
创建参考以测之
有了这些,我们就可以用以下的代码实现测量的功能了!
首先, 用Document的GetWorkbench的方法,得到SPA workbench。
Dim wb
Set wb = d.GetWorkbench("SPAWorkbench")
然后,再用Workbench的GetMeasurable方法,创建一个Measurable对象。
Dim m
Set m = wb.GetMeasurable(Ref1)
需要说明的是,这里的Ref1就是你要测量的元素的参考。创建参考的方法,可以查阅Part的几个CreateReference方法。
当然,我们常用的,是CreateReferenceFromObject,即通过具体的集合元素创建参考。
通过参考创建了上面的Measurable对象之后,如果你是想模拟单一元素的测量(卡尺那个图标),那么,你就可以直接使用Measurable的某些属性或是不带参数的方法,来获取一些测量信息了。如:
'获取面积
myArea=m.Area
'获取角度
myRadius=m.Radius
'获取坐标
Dim Coord(2)
m.GetPoint Coord
myX=Coord(0)
myY=Coord(1)
myZ=Coord(2)
而如果你想模拟的是测量两个元素,如角度、距离这些(直尺那个图标),那么你需要使用Meaurable的带参数的Method,如:
’测量Ref1和Ref2之间的距离
myDis=m.GetMinimumDistance(Ref2)
以下为Measurable的属性与方法截图,详细使用方法各位小伙伴请自行查阅Automation手册。
践一实例以悉之
文章的最后,是一段实例,实现的功能和之前发过的这篇文章类似:
但之前的文章是有一定的局限性的:
而通过测量的方法,我们可以让程序获取坐标的容错率更高:选中某一几何图形集并运行宏代码,程序会遍历并测量几何图形集内的每一个元素,如果可以测出坐标,那就意味着该元素是点类特征(不管是点,投影,提取,相交……),或是球面类特征,或是圆/椭圆类线框特征。
以下为代码运行的效果演示动图。
以下为完整代码
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删