• 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,若对布尔运算感兴趣,可以结合源码来看这些文档。开源的好处是可以了解算法背后的实现原理,如果有更好的方法,还可以参与贡献,让其变得更好。

  • 相关阅读:
    ASP.NET刷新页面的六种方法
    web安全攻防实践能力培养引导
    流程控制 ifwhilefor 语句
    迭代器和生成器
    闭包函数装饰器
    元组字典集合及内置方法
    字符编码与文件操作
    字符类型及内置方法
    初识函数
    递归匿名函数常用的内置方法
  • 原文地址:https://www.cnblogs.com/opencascade/p/OCCT_BO_Intro.html
Copyright © 2020-2023  润新知