布尔差集2 布尔差集 · BrepDiff

从一个或多个目标物体中减去相交的切割体,生成差集结果
📂 LK → Brep 📄 BooleanDifferenceFinal.cs ⚡ 任务并行 🧠 自动回退

📖 功能概述

这是 LK 工具集中的核心布尔运算组件,从一个目标物体中减去一个或多个切割体,生成差集结果。它比 Grasshopper 原生的布尔差分组件更加智能和健壮:

📥 输入参数

名称类型必填说明
目标物体 (B) Brep 必需 被切割的目标物体(单个 Brep,可以是实体或曲面)
切割体 (C) Brep 必需 用于切割的物体(列表,多个切割体同时输入)
容差 (T) Number 可选 布尔运算容差。默认为当前 Rhino 文档的绝对容差。通常无需修改。

📤 输出参数

名称类型说明
结果 (R) Brep 布尔差集运算结果(列表)。成功减去所有有效切割体后得到的目标物体。
失败切割体 (F) Brep 布尔运算失败的切割体(列表)。用于排查哪些切割体导致了问题。
无交集切割体 (N) Brep 与目标物体无交集的切割体(列表)。这些切割体不会影响结果。

🧠 核心流程

1
输入目标 + 切割体
2
过滤切割体
3
尝试批量布尔
4
输出结果

🔍 步骤 2 详细:切割体过滤

在对切割体执行布尔运算之前,组件使用两阶段过滤提前剔除无效切割体:

  1. 边界盒检测 — 快速检查切割体的边界盒是否与目标相交,完全不交的直接归为"无交集"
  2. 几何碰撞检测 — 通过 BrepBrep 求交判断是否有实际相交

过滤过程使用 并行计算(Parallel.ForEach),显著提升多切割体场景下的性能。

⚙️ 步骤 3 详细:双策略布尔运算

A 批量布尔(首选)

一次性将所有切割体与目标做布尔差集运算。效率最高,但不一定能处理复杂重叠几何。

B 逐个布尔(回退)

批量失败后自动切换,逐个切割体依次运算。更稳健,失败时精确标记哪个切割体有问题。

✅ 智能回退:批量布尔失败后,组件自动切换到逐个布尔模式,无需用户手动干预。

⛓️ 碰撞检测逻辑详解

内部的 Collide 方法按以下顺序判断两个 Brep 是否有交集:

  1. 执行 BrepBrep 相交计算
  2. 若有相交曲线 → 判定为有交集
  3. 若没有相交曲线但有相交点 → 判定为有交集
  4. 若目标为实体且切割体的端点在目标内部 → 判定为有交集(包含关系)
  5. 反之亦然

⚡ 异步任务支持

该组件继承自 GH_TaskCapableComponent,在 Grasshopper 的数据驱动运算(DataTree 多分支)场景下,每个分支的布尔运算会以独立任务在后台执行:

💡 说明:若 Grasshopper 不支持任务系统(旧版本),组件会自动降级到同步求解模式,行为一致。

🧪 典型使用场景

场景说明
开孔打洞 在目标实体上减去圆柱/方体等切割体,生成孔洞效果。
复杂外形切割 使用多个切割体对一个目标反复切减,得到复杂外形。
模型减材 从扫描或导入的模型中减去不需要的部分。
批量布尔运算 一次性输入大量切割体,组件自动过滤无交集部分并执行运算。

⚠️ 注意事项

📋 组件信息

名称布尔差集
英文名BrepDiff (BooleanDifferenceFinal)
分类LK → Brep
Exposuresecondary(次级标签页可见)
基类GH_TaskCapableComponent<SolveResults>
GUID21B04604-21A8-4AD3-8FA7-DC6AC6188037