语法
- union { operationsA | operationsB }
- subtract { operationsA | operationsB }
- intersect { operationsA | operationsB }
参数
- operationsA应用于运算对象 A 的当前形状的一系列操作。
- operationsB应用于运算对象 B 的当前形状的一系列操作。
描述
union、intersect 和 subtract 操作将对内联 operationsA 的结果(运算对象 A)和 operationsB 内联的结果(运算对象 B)执行布尔运算。 构造运算对象类似于使用 inline(unify),即首先使用布尔 union 操作合并由 operationsA(或 operationsB)推导得到的形状。
第一个运算对象 A 将确定生成的形状和规则属性,并指定用于叠加几何的材料。 如果运算对象具有冲突的材料属性,则首先将其材料写入几何,由此确保保留所有材料属性。
组件标签
操作自动将语义组件标签应用于生成的面组件:

"bool.A" "bool.B" "bool.cut" | 来自运算对象 A 的面(蓝色) 来自运算对象 B 的面(绿色) 相交边(橙色) |
|
注:
对于重叠面(2D 相交),同时应用 "bool.A" 和 "bool.B"。开放和闭合运算对象
布尔运算在 2D(平面)和 3D 闭合网格中都有明确的定义。 在 3D 中,只要边界不相交,开放运算对象(具有孔洞的平面和网格)均被视为闭合。 请参阅以下参考表和示例。
在后续 comp 操作中,通过使用“bool”自动标签功能,可以轻松实现“Plane subtract Volume”和“Plane intersect Volume”这两种常见用例。 以下示例对此进行了说明:
![]() | ![]() | |
|
| |
![]() | ||
|
参考表
两个运算对象均为闭合状态 | 开放和闭合运算对象 平面法线朝上 | 开放和闭合运算对象 平面法线朝下 | 开放和闭合运算对象 仅部分相交 | |
输入运算对象 | ![]() | |||
| ![]() | |||
| ![]() | |||
| ![]() | |||
| ![]() | |||
| ![]() |
相关内容
示例
颜色
这些规则适用于在以下示例中使用的颜色。
Blue --> color("#0399F5")
Green --> color("#09DE1F")
Yellow --> color("#FADB19")
Purple --> color("#8D09DE")
Red --> color("#FF360A")
Orange --> color("#FA9100")
运算对象的顺序
从立方体中减去圆柱体,反之亦然。 | ![]() |
第一个运算对象 A 将确定叠加面的材料。 | ![]() |
第一个运算对象 A 将确定生成形状的属性。 | ![]() |
运算对象内联
一个运算对象可以产生单个形状 (Left) 或多个形状(Right 中的运算对象 B)。 如果存在多个形状,则首先将其合并,类似于使用 inline(unify)。 | ![]() |
如果运算对象产生多个形状,即使它们未与运算对象 A 相交,它们也是统一的。 | ![]() |
体量建模
步骤 1:已拉伸的初始形状(当前形状,作为运算对象 A)与插入的球体(规则 Sphere 的结果,作为运算对象 B)相交。 | ![]() |
步骤 2:将当前形状分割成两部分。 如果使用 inline(unify),则分割操作的生成形状 LowerHalf 和 UpperHalf 统一(注意消失的内表面)。 | ![]() |
步骤 3:我们将通过减去一个圆柱体(规则 Hole 的结果,用作运算对象 B)来继续细化体量(步骤 1 和 2 后的当前形状,作为运算对象 A)。 | ![]() |
添加标签:使用 3D 布尔操作,可以轻松创建具有复杂表面的体量模型。 在本示例中,在每个步骤中添加了标签,由此可在最后为不同的表面分配正确的规则(此处使用不同的颜色表示)。 | ![]() |
3D 布尔和自动标签
在本示例中,首先拉伸初始形状,由此可向所有面添加“extrude”自动标签。 然后,减去形状的平移和旋转副本,由此可向生成的面额外添加“bool”自动标签。 最后,这些标签用于提取不同的表面并对其进行相应着色。 | ![]() |
布局建模
步骤 1:插入五边形 (primitiveDisk(5)),然后用缩小的副本执行 union 操作。 union 操作将保留所有原始边,这意味着生成的几何包含 3 个面,如颜色所示。 | ![]() |
步骤 2:目标是合并黄色和绿色的面并标记边,为步骤 3 做好准备。 comp 用于修改相应的面,inlining 和 cleanupGeometry 用于将修改后的部分重新合并在一起。 注:为了使用 cleanupGeometry 合并规则 B 中的面,需要使用 deleteUV 移除已插入资产上的 UV 坐标,然后需要使用 deleteTags 移除“bool.A”和“bool.cut”,否则会阻止该过程。 | ![]() |
步骤 3:对房屋覆盖区进行拉伸,并对前院覆盖区进行偏移。 步骤 2 中的边标签将自动传播到新面,由此可区分面向前院的立面以及与房屋接触的偏移边界。 此信息可用于在后续步骤中对入口区域进行建模。 | ![]() |
开放运算对象的行为
运算对象 A 为封闭立方体,而运算对象 B 为开放立方体。 左:B 的开放边界不是相交的运算对象 A。 右:B 的开放边界是相交的运算对象 A。 | ![]() |
运算对象 A 为封闭立方体,而运算对象 B 为 2D 四边形。 左:四边形完全切割立方体。 平面以下的所有部分均视为“内部”,因此将会消失。 右:四边形部分切割立方体。 | ![]() |