eryar

PipeCAD - Plant Piping Design Software.
RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
posts - 564, comments - 590, trackbacks - 0, articles - 0

OpenCASCADE 布尔运算简介

Posted on 2022-02-25 09:27 eryar 阅读(728) 评论(0)  编辑 收藏 引用 所属分类: 2.OpenCASCADE

OpenCASCADE 布尔运算简介

eryar@163.com

布尔运算(Boolean Operations)是根据两组模型的组合创建出新的模型的造型方法。两组模型Objects/Tools之间有三种布尔算子:

  • 布尔并:FUSE,将两组模型合并成一个;
  • 布尔减:CUT,从Objects中减去Tools模型;
  • 布尔交:COMMON,即两组模型的共有部分;

布尔运算的输入是两组模型,分别叫Objects和Tools。因为两个参数的前后顺序容易混淆,借用机械加工类比来加深记忆:Objects类比为待加工的工件,Tools类比为机床刀具。当执行布尔减运算时,相当于工件Object被刀具Tool切割。

在OpenCASCADE中布尔运算第一个参数Objects也叫Arguments,第二个参数也是Tools。对应源码如下:

布尔运算的大概流程是先对两个模型进行求交计算,求交结果主要是Edge边。然后再根据求交计算新得到的Edge边进行定位分类Classification处理,排除不需要的Edge边,面等。最后根据边重构出新的BREP模型。

布尔运算的健壮性及效率依赖一些底层算法,如求交算法Intersection Algorithm,投影算法Projection Algorithm,拟合算法Approximation Algorithm及定位算法Classification Algorithm等。求交算法主要有面面求交、面边求交、边边求交等。投影和拟合算法主要用于计算边在面中的P-Curves。定位算法主要用于重构阶段,通过定位排除不需要的边、面等。

关于重构模型OpenCASCADE提供了一些算法,如通过使用函数BOPAlgo_Tools::EdgesToWires 和 BOPAlgo_Tools::WiresToFaces从线框模型生成面。

关于定位算法,提供BOPTools_AlgoTools::ComputeState计算点、边、面相对于其他模型的位置状态。提供BOPTools_AlgoTools::IsHole来判断面FACE上的环WIRE是不是孔。

通过查看源码,可以看到其实现原理:即根据环WIRE中的边EDGE的PCurve是顺时针还是逆时针来判断。通过对PCurve采样点得到一个多边形,通过计算多边形面积的正负来判断。

OpenCASCADE中关于布尔运算有详细的文档Boolean Operations Specification,若对布尔运算感兴趣,可以结合源码来看这些文档。开源的好处是可以了解算法背后的实现原理,如果有更好的方法,还可以参与贡献,让其变得更好。

 


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理