CATIA VBA 获取零件“最小”包围盒(Minimum Bounding Box)

[原创文章,谢绝转发]

 

1.问题描述

CATIA中零件的最小包围盒(Minimum Bounding Box)可以用来粗略判断零件之间是否干涉,也经常用在加工件的毛坯尺寸估算。包围盒一般用长方体表示,类型通常有两种:

(1)相对于坐标系方向的包围盒,也叫AABB包围盒。这种包围盒长方体的每个面都平行于坐标系平面,如下图所示:

CATIA VBA 获取零件“最小”包围盒(Minimum Bounding Box)_第1张图片

 

CATIA中获取AABB包围盒有两种快捷方法:

(a) 选中一个实体,用"Bounding Box…"命令,即可得到如上图所示的包围盒

 

CATIA VBA 获取零件“最小”包围盒(Minimum Bounding Box)_第2张图片

 (b) 在CATIA显示选项中选择“显示操作边界框”,如下图所示:

CATIA VBA 获取零件“最小”包围盒(Minimum Bounding Box)_第3张图片

设置完成之后,鼠标选中一个元素,可以自动显示AABB包围盒。鼠标移走之后包围盒不保存。

(2) 第二种包围盒叫做OBB包围盒,其长方体各面的方向与被包围对象的质点分布情况有关。选择合适的算法,可以得到最小体积的长方体包围盒。

CATIA VBA 获取零件“最小”包围盒(Minimum Bounding Box)_第4张图片

在VBA程序中获取AABB包围盒比较简单,直接计算极值点坐标即可得到包围盒边界参数。而OBB包围盒则比较麻烦。

CATIA中惯性测量命令给出了基于惯量主轴的包围盒参数,如下图所示:

CATIA VBA 获取零件“最小”包围盒(Minimum Bounding Box)_第5张图片

左侧的结构树上的BBOx,BBOy,BBOz是包围盒长方体的中心点坐标,BBLx, BBLy,BBLz分别表示包围盒的长宽高。右侧的测量界面上主轴参数表示惯量主轴的方向矩阵。

CATIA VBA没有给出直接测量包围盒的API。有文章提出通过StartCommand调用上图所示的惯性测量命令,再去零件参数列表中得到包围盒参数。这个方案的缺点非常明显:遍历零件时窗口频繁打开关闭非常容易出错;代码执行时严重干扰用户正常使用其他应用程序。

2. 解决方案

经过观察发现CATIA惯性测量中最小包围盒的空间位置完全由惯量主轴向量确定。而恰巧惯量主轴方向矩阵可以通过Inertia对象的GetPrincipalAxes方法获取。于是解决思路如下:

(1)已知零件惯量方向和重心,可以创建惯量主轴坐标系A1,其原点即零件重心,也是BBOX,BBOY,BBOZ

(2)求零件在轴系A1中X,Y,Z方向最大和最小极值点。通过极值点坐标即可计算出BBLX,BBLY,BBLZ。如果需要做出包围盒立方体各个面,继续下一步。如不需要,程序结束

(3)通过极值点做平行于轴系A1的平面,通过相交拉伸等操作做出包围盒的6个面。程序结束

这个方案的优点是避免了StartCommand方法处理CATIA命令窗口,程序稳定,执行速度快,不干扰用户使用操作系统其他应用程序。

3. 代码实现

代码较长,这里给出下载链接:

链接:https://pan.baidu.com/s/1wyAz5TIlPWtEiky4bhkXig

提取码:tspw

 4.讨论

上述解决方案给出的是基于惯量主轴方向的包围盒,与CATIA惯量测量中的数据一致。然鹅,这种方法主要以默认坐标系下的质量分布为依据,从几何结果来讲,经常不是实际“最小”的包围盒。比如一个最简单的长方体凸台,如果长方体各面方向与默认坐标系有一定角度,其惯量主轴就就不与长方体面平行,得到的包围盒不是最小的,如下图所示。

CATIA VBA 获取零件“最小”包围盒(Minimum Bounding Box)_第6张图片

再举一个例子:对于一个实体特征,如果在上面做一个开槽操作,由于质量分布发生了变化,其惯量主轴也会改变,进而用本文提到的方法求出的包围盒的方向及大小也随之变化。而另一方面,在实体内部开槽,外部边界保持原状。从加工下料、相交判断等应用方面来说,包围盒应该不变。

CATIA VBA 获取零件“最小”包围盒(Minimum Bounding Box)_第7张图片

结论:通过VBA代码可以获取基于惯量主轴的包围盒,其结果与CATIA惯量测量结果一致。但从应用角度来说,得到的包围盒并不是最优的。

5.参考资料

(1) 基于惯量主轴的包围盒创建   http://www.coe.org/p/fo/et/thread=26961

(2) 基于测量命令的包围盒参数获取 https://mp.weixin.qq.com/s/0w6jQ6bGaYPTzWPj9IP4hw

(3) 维基百科Minimun Boungding Box https://en.wikipedia.org/wiki/Minimum_bounding_box

你可能感兴趣的:(vba)