• opencascade 布尔运算笔记


    BRepAlgoAPI_Common 对两个topods求解 没有公共部分也返回结果了 我想要的结果是没有公共部分返回false

    在 Open CASCADE 中使用 BRepAlgoAPI_Common 进行布尔操作时,即使两个 TopoDS_Shape 没有公共部分,操作仍会返回一个结果。为了判断两个形状是否确实有公共部分,并在没有公共部分时返回 false,你可以检查生成的结果是否为空或其属性是否表明它没有有效的几何内容。以下是一个实现该逻辑的示例:

    using System;
    using System.Linq;
    using OpenCascade;
    
    class Program
    {
        static void Main(string[] args)
        {
            // 创建两个 TopoDS_Shape 对象
            TopoDS_Shape shape1 = CreateShape1();
            TopoDS_Shape shape2 = CreateShape2();
    
            // 使用 BRepAlgoAPI_Common 计算公共部分
            BRepAlgoAPI_Common common = new BRepAlgoAPI_Common(shape1, shape2);
            TopoDS_Shape commonShape = common.Shape();
    
            // 检查公共部分是否有效
            if (IsCommonShapeValid(commonShape))
            {
                Console.WriteLine("The shapes have a common part.");
            }
            else
            {
                Console.WriteLine("The shapes do not have a common part.");
            }
        }
    
        static TopoDS_Shape CreateShape1()
        {
            // 创建第一个形状
            BRepPrimAPI_MakeBox boxMaker = new BRepPrimAPI_MakeBox(100, 100, 100);
            return boxMaker.Shape();
        }
    
        static TopoDS_Shape CreateShape2()
        {
            // 创建第二个形状
            BRepPrimAPI_MakeSphere sphereMaker = new BRepPrimAPI_MakeSphere(50);
            return sphereMaker.Shape();
        }
    
        static bool IsCommonShapeValid(TopoDS_Shape commonShape)
        {
            // 检查形状是否为空
            if (commonShape.IsNull)
            {
                return false;
            }
    
            // 检查形状中的实体数目是否为零
            TopExp_Explorer explorer = new TopExp_Explorer(commonShape, TopAbs_ShapeEnum.TopAbs_SOLID);
            if (!explorer.More())
            {
                return false;
            }
    
            // 进一步检查是否有有效的几何内容
            BRepBuilderAPI_MakeSolid solidMaker = new BRepBuilderAPI_MakeSolid(commonShape);
            if (!solidMaker.IsDone())
            {
                return false;
            }
    
            return true;
        }
    }
    

    代码说明

    1. 创建形状: CreateShape1CreateShape2 函数创建两个示例形状,分别是一个长方体和一个球体。

    2. 布尔操作: 使用 BRepAlgoAPI_Common 计算两个形状的公共部分。

    3. 验证公共部分: IsCommonShapeValid 函数用于验证公共部分是否有效。该函数通过以下几个步骤进行检查:

      • 检查结果形状是否为空。
      • 使用 TopExp_Explorer 检查结果形状中是否有实体(例如,实体、面等)。
      • 使用 BRepBuilderAPI_MakeSolid 进一步检查是否有有效的几何内容。

    如果以上任何检查失败,则返回 false,表示没有有效的公共部分。

    这种方法确保你可以正确判断两个形状是否确实有公共部分,并在没有公共部分时返回 false

  • 相关阅读:
    网络编程:事件模型关于epoll 边缘触发与水平触发的理解
    阿里的数据同步神器——Canal
    有哪些编程语言能在AI的应用上大显身手?
    golang 协程一些小问题 golang 协程一些小问题,以及解决办法
    基于海鸥算法优化的lssvm回归预测-附代码
    CSC青年骨干教师项目教师节当天开始申报
    软件测试之Web测试流程和方法
    Mybatis练习(多条件查询)
    基于二维声子晶体的体声波谐振器仿真分析
    Yolov5 (v6.1)添加注意力机制
  • 原文地址:https://blog.csdn.net/weixin_45751713/article/details/139399875