布尔数据 面的相交

news/发布时间2024/5/17 9:34:12

布尔数据 面的相交

eryar@163.com

1 Introduction

OpenCASCADE中对面的相交定义如下图所示:

三维空间中两个带有Geometry Surface的面Face,当两个Surface之间的距离小于Face中的容差Tolerance,则认为是相交的。一般两个面之间相交得到的是交线,还有一些情况得到的是交点,如下图所示:

布尔运算中面的相交是相对复杂的问题,除了考虑上述交线和交点的问题以外,还要考虑有重叠的情况;对于新生成的交线,还要考虑生成PCurve;若面上有开孔,还要将穿过开孔区域的交线排除等;最后要考虑如何保存面相交的结果。相交的计算在函数:

最终是调用IntTools_FaceFace来计算两个面的相交。并将计算结果交线和交点,是否重叠等信息保存到BOPDS_InterfFF中:

2 Face Info

类BOPDS_FaceInfo用来存储以下信息:

注意PBo31和PBSc1,一个状态是On,一个状态是Section。在相交处理类BOPAlgo_PaveFiller中通过函数BOPAlgo_PaveFiller::UpdateFaceInfo将这些相交的状态更新。

3 Tangent Face

从前面的文章关于检测边与边、边与面是否有重叠时采用了固定采样点来处理的不严谨的逻辑来看,判断线的重叠是个复杂的问题,判断面与面的重叠就相对更复杂。本文先从简单入手,先看对于最简单的两个平面重叠的检测,引出大家对于任意两个面重叠区域检测的思考。对这种特殊的情况处理在IntTools_FaceFace中的函数PerformPlanes()中实现。其中使用二次曲面的几何求交法进行处理,源码如下:

通过源码可以看出,若两个平面之间的法向夹角小于TolAng及距离小于Tol时,则认为两个面是一样的IntAna_Same;当距离大于Tol时,则认为没有相交IntAna_Empty。

对于重叠的平面,将theTangentFaces设置成true表示是重叠的。这里留下一个问题大家思考:如何判断自由曲面的重叠情况?

4 Hole

当面上有孔洞时,还要对交线进行处理,以排除掉孔洞中的交线。当使用IntTools_FaceFace来计算两个面的交线时,可以看到交线的范围不正确,没有处理孔洞情况,甚至也没有处理面的边界。如下图所示红色的交线为使用IntTools_FaceFace计算得到的:

当使用BOPAlgo_PaveFiller计算交线并结合PaveBlock得到交线显示如下图所示:

虽然计算两个面之间的相交处理最终是调用的IntTools_FaceFace,但是要得到正确的交线需要使用类BOPAlgo_PaveFiller。这里也留下问题供大家思考:为什么IntTools_FaceFace计算的交线范围不正确?为什么BOPAlgo_PaveFiller计算的交线正确?

5 Conclusion

综上所述,布尔数据中面的相交的结果可能有交线,也可能有交点。将求交结果保存到FaceInfo中。从简单的两个平面重叠来看,将重叠的状态用变量theTangetFaces来保存。那任意两个曲面重叠如何判断呢?面的相交虽然提供类IntTools_FaceFace来计算,但是没有正确处理交线的范围,为什么BOPAlgo_PaveFiller中可以正确处理交线呢?

 

祝大家中秋国庆节日快乐!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/36302727.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

20211314王艺达学习笔记4

学习总结 第七章 文件操作 文件操作级别 (1)硬件级别 fdisk:将硬盘、U盘或SDC盘分区 mkfs:格式化磁盘分区,为系统做好准备 fsck:检 查和维修系统 碎片整理:压缩文件系统中的文件 (2)操作系统内核中的文件系统函数 前缀为k表示内核函数 (3)系统调用 open()、read()、…

9.28日

早上UML统一建模语言学了用例图,乒乓球课继续练习反手击球,进一步规范动作。下午离散学到了集合关系的闭包运算以及集合的划分和覆盖,数据结构则简单讲了二叉树的概念。package runoob.binarySearch;/*** 二分查找法*/ public class BinarySearch {// 二分查找法,在有序数组…

Logstash 获取通道类型 Redis 数据

Redis 服务器是 logstash 官方推荐的 broker 选择。Broker 角色也就意味着会同时存在输入和输出俩个插件。这里我们先学习输入插件。 LogStash::Inputs::Redis 支持三种 data_type(实际上是redis_type),不同的数据类型会导致实际采用不同的 Redis 命令操作:list => BLPO…

谈一谈接口测试

接口测试为什么重要? 我相信你一定听说过这样一句话:“测试要尽早介入,测试进行得越早,软件开发的成本就越低,就越能更好地保证软件质量。” 但是如何尽早地进入测试,作为软件测试的你,是不是也没办法说得清楚呢?其实上面那句话中的“测试”,所指的并不是测试这个人,…