首页 > 其他分享 >布尔数据 面的相交

布尔数据 面的相交

时间:2023-09-29 18:33:34浏览次数:35  
标签:BOPAlgo 重叠 IntTools 相交 FaceFace 交线 数据 布尔

布尔数据 面的相交

[email protected]

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中可以正确处理交线呢?

 

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

 

标签:BOPAlgo,重叠,IntTools,相交,FaceFace,交线,数据,布尔
From: https://www.cnblogs.com/opencascade/p/occt_int_face.html

相关文章

  • 重测序数据碱基质量评估
     001、测序数据为fastq格式fastq格式数据没四行为一个单位,其中第二行是碱基,第四行为对应的碱基质量值:如下:(base)[b20223040323@admin1test01]$ls##测试fastq格式数据test.fastq(base)[b20223040323@admin1test01]$head-n4test.fastq|cat-n##第......
  • 教程:群晖NAS使用教程:如何设置定期执行数据清理?
    当使用NAS频繁,也就意味着硬盘读写数据也越来越多,而如果遇到突然断电或其他不可预料的系统故障,可能就会遇到数据一致性问题,最终导致数据不可用。而频繁写入修改文件,也会导致碎片文件增多,而影响硬盘性能。那么,就可以定期给你的群晖NAS进行数据清理。数据清理数据清理可以对文件系......
  • 向有序数组插入数据,数组依然是有序的
    数组降序的情况下插入数据依然是降序第1次推导publicclasstest{publicstaticvoidmain(String[]args){int[]ints={90,80,70};inttmp=85;//与第1个数比较时//[0][1][2][]if(tmp>ints[0]){/......
  • 造数据
    title:造数据?拿脚造!toc:truetags:技巧cover:image/trick.pngabbrlink:24146date:2023-09-0821:24:38造数据方法大全在一切的一切开始之前优质的随机数?rand()#include<chrono>#include<random>mt19937_64rnd(chrono::steady_clock::now().time_since_epoch().......
  • Python笔记:基本数据结构(容器)的优化
    列表的性能问题队列的弹出问题利用Python的原生语法很难写出一个真正完全能达到\(O(1)\)的队列,究其原因是由于insert方法的时间复杂度问题:classqueue: def__init__(self,q): self.q=[] defpopright(self): self.q.pop() defappendleft(self,elem): self.q.ins......
  • 关于一个django工程如何与达梦数据库连接的全程总结
    关于一个django工程如何与达梦数据库连接的全程总结目录1.达梦数据库的安装(win、图形化工具)2.DM管理工具的基本使用:表空间的建删用户的管理模式的建删表的创建、删除、查看3.Django项目接入dm数据库settings的database配置解释器中的相关包dmPython的编译※环境准备正式编......
  • 浅谈数据结构栈与队列
    栈1.栈的基本概念栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。不能插入和删除的一端为栈底(Bottom)栈顶(top):线性表允许进行插入删除的那一端栈底(bottom):固定的,不允许进行插入和删除的那一端空栈:不含任何元素的......
  • sql查询之拼接外表或该表不存在的数据,简化多表联查的操作
    (内容)1.引言最近写项目时,用到了多表联查的知识点,我需要传article类和web_user类的username的参数这是我的三个表--MySQLdump10.13Distrib8.0.26,forWin64(x86_64)----Host:127.0.0.1Database:web-----------------------------------------------------......
  • Logstash 获取通道类型 Redis 数据
    Redis服务器是logstash官方推荐的broker选择。Broker角色也就意味着会同时存在输入和输出俩个插件。这里我们先学习输入插件。LogStash::Inputs::Redis 支持三种 data_type(实际上是redis_type),不同的数据类型会导致实际采用不同的Redis命令操作:list=>BLPOPchannel......
  • Python数据类型
    基本数据类型Python中有一些常用的基本数据类型,让我们一起来看看各种类型及其用途。整数(int)整数是Python中最基本的数据类型之一,用于表示没有小数部分的整数值。age=25浮点数(float)浮点数用于表示带有小数部分的数值。pi=3.14字符串(str)字符串是一系列字符的序列,可以用来表示文本......