如何构造一个 OpenCascade “TopoDS_Shape”,它是“BRepAlgoAPI_Common”的标识元素

How do I construct an OpenCascade `TopoDS_Shape` which is an identity element of `BRepAlgoAPI_Common`

提问人:Joe 提问时间:11/18/2023 更新时间:11/18/2023 访问量:29

问:

我正在尝试使用 OpenCascadeBRepAlgoAPI_CommonBRepAlgoAPI_Fuse 作为构造实体几何 (CSG) 的“交集”和“并集”操作的实现。 我的实体表示为TopoDS_Shape的实例(尽管我对“实体”值非常感兴趣,所以主要是和TopoDS_SolidTopoDS_CompSolid)

就有限形状的简单操作而言,这进展得相当顺利。

但是,由于 CSG 操作形成布尔代数,因此我对为两个 CSG 操作构造标识值感兴趣。

也就是说,对于所有形状,其值和 .everywhereintersection(x, everywhere) == xnowhereunion(x, nowhere) == x

BRepBuilderAPI_MakeSolid() 的文档指出

空实体被认为覆盖了整个空间

因此,我希望我应该能够通过构造一个 ,不添加任何外壳,然后构建结果来构造一个值 ,(交集的恒等式):everywhereBRepBuilderAPI_MakeSolid

    auto everywhere = BRepBuilderAPI_MakeSolid().Shape();

但是,如果我对此进行实验,它实际上可以用作“并集”()的恒等式,如果我尝试计算对象与(使用)的交集,我会得到一个空的结果。nowhereeverywhereBRepAlgoAPI_Common

我是否有可能构建一个形状来作为“交叉点”的标识,如果可以,如何构建?

C++ 布尔逻辑 OpenCascade CSG

评论

0赞 Joe 11/18/2023
我应该补充一点,取空实体的补码也不会导致交集的恒等式

答: 暂无答案