先上动图,看效果👇
上述python代码实现的功能,是从消参的模型中识别出孔特征,并进行上色的操作。
如果是一个带参的实体,这件事很容易:我们可以遍历Body下面的Shapes对象,判断Shape的类型是否为Hole即可。
但对于消参的实体,我们就要稍微动一动脑筋了:
首先,消参实体,我们能得到的信息只有它的拓扑顶点、棱线、面这些几何。实体的所有面,可以通过Search来得到。
所以,问题的关键,就来到了:如何从一堆面里,过滤出哪些是孔的内表面。
最容易想到的规则,就是判断面是否为圆柱面。但二者是必要不充分条件:孔面一定是圆柱面;但圆柱面却不一定是孔面,还有可能是销的外表面(如下图A),或是某条直线棱边的圆角面(如下图B)。
当然,上面所说的只是众多干扰项中的两个典型,实际可能会有更多特殊情况。但文章篇幅有限,所以接下来,小编就以上述两项为例,来分享一下自己关于排除这些干扰项的思考。当然,你也可以有自己的判断逻辑。
首先,在确定了一张面为圆柱面的前提下,可以求这张面的边界:如果它只有一个边界,那么它就是圆角面(下图蓝色);如果边界的数量为2,那么就是一个完整的环形,此时可能为孔的内表面,或者销的外表面(下图黄色)。
那么孔和销如何区分呢?我们可以求一下当前曲面的COG(Center of Gravity),即重心。如果它是一个销面,那么重心点会落在实体以内(下图红色点);而一个孔面,重心则会落在实体以外(下图绿色点)。此时,我们就可以通过测量这个重心点到实体的距离是否为0,来进一步过滤。
那么,上述的逻辑,用代码如何表达呢?小编这里也不卖关子,直接给出完整的python脚本代码。
声明:本代码仅做学习交流,不是那种直接拿来就用的工具,不提供更改优化服务。按特定的需求定制,那是另外的价钱。
开头动图对应的代码如下: