CATIA VBA中如何实现测量功能

文章转载自楼主本人的公众号“CATIA那点事儿”

欲撰此文必有因

最近,很多小伙伴在写VBA/宏代码时,都遇到了“测量”相关的问题。鉴于最近这个话题上榜率很高,小编决定写此文章,介绍一下如何用Automation中的Object实现测量这一功能!

在进行CATIA VBA二次开发时,需要测量的场景还是比较多的,例如:

  • 对某些元素,如球心坐标、或多对元素的间距等项目测量,并将值导出;

  • 通过测量的方式,找出多个元素中到目标元素最大/最小距离的那个,或是面积最小/最大的那个,从而实现筛选的目的。

代码测之何所异

首先可以肯定的是,CATIA Automation中是有测量相关的API的,它虽不能像手动点击测量命令那样,在特征树上生成一个“测量特征”,但可以实现同样测量的功能,更像是手动测量时,不勾选“Keep Measure”的效果。

CATIA VBA中如何实现测量功能的图1

持此许可方能行

测量相关的API,我们可以从Working with Space Analysis的Object中找到。

CATIA VBA中如何实现测量功能的图2

上述Object使用的前提,是需要我们有SPA这个许可证(用盗版的小伙伴就无所谓啦)

CATIA VBA中如何实现测量功能的图3

创建参考以测之

有了这些,我们就可以用以下的代码实现测量的功能了!

首先, 用Document的GetWorkbench的方法,得到SPA workbench。

Dim wb

Set wb = d.GetWorkbench("SPAWorkbench")

然后,再用Workbench的GetMeasurable方法,创建一个Measurable对象。

Dim m

Set m = wb.GetMeasurable(Ref1)

需要说明的是,这里的Ref1就是你要测量的元素的参考。创建参考的方法,可以查阅Part的几个CreateReference方法。

CATIA VBA中如何实现测量功能的图4

当然,我们常用的,是CreateReferenceFromObject,即通过具体的集合元素创建参考。

通过参考创建了上面的Measurable对象之后,如果你是想模拟单一元素的测量(卡尺那个图标CATIA VBA中如何实现测量功能的图5),那么,你就可以直接使用Measurable的某些属性或是不带参数的方法,来获取一些测量信息了。如:

'获取面积

myArea=m.Area

'获取角度

myRadius=m.Radius

'获取坐标

Dim Coord(2)

m.GetPoint Coord

myX=Coord(0)

myY=Coord(1)

myZ=Coord(2)

而如果你想模拟的是测量两个元素,如角度、距离这些(直尺那个图标CATIA VBA中如何实现测量功能的图6),那么你需要使用Meaurable的带参数的Method,如:

’测量Ref1和Ref2之间的距离

myDis=m.GetMinimumDistance(Ref2)

以下为Measurable的属性与方法截图,详细使用方法各位小伙伴请自行查阅Automation手册。

CATIA VBA中如何实现测量功能的图7

践一实例以悉之

文章的最后,是一段实例,实现的功能和之前发过的这篇文章类似:

导出点的坐标到Excel

但之前的文章是有一定的局限性的:

  1. GetCoordinates是Point的Method。换句话说,如果图形集里有提取、相交、投影等元素,虽然其本质上也是点,但由于不是Point类特征,所以无法使用GetCoordinates方法

  2. 如果所选几何图形集中有曲线或不规则曲面,无法将其过滤(但这段可以加防错或判断以优化)

  3. 如果所选几何图形中有球面特征,上述方法无法获取球心坐标

而通过测量的方法,我们可以让程序获取坐标的容错率更高:选中某一几何图形集并运行宏代码,程序会遍历并测量几何图形集内的每一个元素,如果可以测出坐标,那就意味着该元素是点类特征(不管是点,投影,提取,相交……),或是球面类特征,或是圆/椭圆类线框特征。

以下为代码运行的效果演示动图。

CATIA VBA中如何实现测量功能的图8

以下为完整代码

CATIA VBA中如何实现测量功能的图9

默认 最新
当前暂无评论,小编等你评论哦!
点赞 5 评论 收藏
关注