--- outline: [2, 3] --- # CSGOperator - 源文件:`packages/sdk/src/tool/CSGOperator.ts` - 文档位置:`packages/docs/api/tool/CSGOperator.md` ## 类型:`CSGOperationType` - 作用:CSGOperationType 的类型定义。 ### 定义 ```ts export type CSGOperationType = typeof CSGOperationType[keyof typeof CSGOperationType]; ``` ## 类:`CSGOperator` - 作用:CSG 操作器 使用 three-bvh-csg 进行布尔运算 ### 构造函数 #### `new CSGOperator()` - 作用:创建 CSGOperator 实例。 - 入参:无 - 出参:`CSGOperator` - 返回说明:返回当前类实例。 ### 属性 | 属性名 | 可见性 | 类型 | 作用 | | --- | --- | --- | --- | | `evaluator` | `public` | `Evaluator` | 用于保存 `evaluator` 对应的数据。 | ### 访问器 #### `get debugMode(): boolean` - 作用:获取 debug Mode。 - 入参:无 - 出参:`boolean` - 返回说明:返回布尔结果。 #### `set debugMode(value: boolean)` - 作用:设置 debug Mode。 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `value` | `boolean` | 是 | 要写入的新值。 | - 出参:`void` - 返回说明:无返回值。 ### 方法 #### `clearBrushCache(mesh?: THREE.Mesh): void` - 作用:清除 Brush 缓存 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `mesh` | `THREE.Mesh` | 否 | - 可选,指定要清除的网格,不指定则清除所有 | - 出参:`void` - 返回说明:无返回值。 #### `union(meshA: THREE.Mesh, meshB: THREE.Mesh): THREE.BufferGeometry` - 作用:执行并集操作 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `meshA` | `THREE.Mesh` | 是 | - 网格 A | | `meshB` | `THREE.Mesh` | 是 | - 网格 B | - 出参:`THREE.BufferGeometry` - 返回说明:结果几何体 #### `subtract(meshA: THREE.Mesh, meshB: THREE.Mesh): THREE.BufferGeometry` - 作用:执行差集操作 (A - B) - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `meshA` | `THREE.Mesh` | 是 | - 被减去的网格 | | `meshB` | `THREE.Mesh` | 是 | - 减去的网格 | - 出参:`THREE.BufferGeometry` - 返回说明:结果几何体 #### `reverseSubtract(meshA: THREE.Mesh, meshB: THREE.Mesh): THREE.BufferGeometry` - 作用:执行反向差集操作 (B - A) - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `meshA` | `THREE.Mesh` | 是 | - 网格 A | | `meshB` | `THREE.Mesh` | 是 | - 网格 B | - 出参:`THREE.BufferGeometry` - 返回说明:结果几何体 #### `intersection(meshA: THREE.Mesh, meshB: THREE.Mesh): THREE.BufferGeometry` - 作用:执行交集操作 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `meshA` | `THREE.Mesh` | 是 | - 网格 A | | `meshB` | `THREE.Mesh` | 是 | - 网格 B | - 出参:`THREE.BufferGeometry` - 返回说明:结果几何体 #### `difference(meshA: THREE.Mesh, meshB: THREE.Mesh): THREE.BufferGeometry` - 作用:执行对称差集操作 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `meshA` | `THREE.Mesh` | 是 | - 网格 A | | `meshB` | `THREE.Mesh` | 是 | - 网格 B | - 出参:`THREE.BufferGeometry` - 返回说明:结果几何体 #### `hollowSubtract(meshA: THREE.Mesh, meshB: THREE.Mesh): THREE.BufferGeometry` - 作用:执行空心差集操作 从 meshA 中减去 meshB,但只删除相交的面 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `meshA` | `THREE.Mesh` | 是 | - 网格 A | | `meshB` | `THREE.Mesh` | 是 | - 网格 B | - 出参:`THREE.BufferGeometry` - 返回说明:结果几何体 #### `hollowIntersection(meshA: THREE.Mesh, meshB: THREE.Mesh): THREE.BufferGeometry` - 作用:执行空心交集操作 只保留相交部分的表面 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `meshA` | `THREE.Mesh` | 是 | - 网格 A | | `meshB` | `THREE.Mesh` | 是 | - 网格 B | - 出参:`THREE.BufferGeometry` - 返回说明:结果几何体 #### `operate(meshA: THREE.Mesh, meshB: THREE.Mesh, operation: CSGOperationType): THREE.BufferGeometry` - 作用:通用 CSG 操作方法 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `meshA` | `THREE.Mesh` | 是 | - 网格 A | | `meshB` | `THREE.Mesh` | 是 | - 网格 B | | `operation` | `CSGOperationType` | 是 | - CSG 操作类型 | - 出参:`THREE.BufferGeometry` - 返回说明:结果几何体 #### `subtractMultiple(meshA: THREE.Mesh, meshes: THREE.Mesh[]): THREE.BufferGeometry` - 作用:批量执行差集操作 从 meshA 中减去多个网格 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `meshA` | `THREE.Mesh` | 是 | - 被减去的网格 | | `meshes` | `THREE.Mesh[]` | 是 | - 要减去的网格数组 | - 出参:`THREE.BufferGeometry` - 返回说明:结果几何体 #### `setAttributes(attributes: string[]): void` - 作用:设置属性插值 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `attributes` | `string[]` | 是 | - 要插值的属性名称数组 | - 出参:`void` - 返回说明:无返回值。 #### `setUseGroups(useGroups: boolean): void` - 作用:设置是否使用材质组 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `useGroups` | `boolean` | 是 | - 是否使用组 | - 出参:`void` - 返回说明:无返回值。 #### `meshToBrush(mesh: THREE.Mesh): Brush` - 作用:将 Mesh 转换为 Brush,使用缓存机制复用 Brush 对象 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `mesh` | `THREE.Mesh` | 是 | - 需要转换的网格 | - 出参:`Brush` - 返回说明:Brush 对象 #### `evaluate(meshA: THREE.Mesh, meshB: THREE.Mesh, operation: CSGOperationType): THREE.BufferGeometry` - 作用:统一的 CSG 操作执行方法 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `meshA` | `THREE.Mesh` | 是 | - 网格 A | | `meshB` | `THREE.Mesh` | 是 | - 网格 B | | `operation` | `CSGOperationType` | 是 | - CSG 操作类型 | - 出参:`THREE.BufferGeometry` - 返回说明:结果几何体 ## 构造示例 - 当前 Demo 中没有直接展示 `CSGOperator` 的构造调用。 ## 函数示例 - 当前 Demo 中没有直接展示 `CSGOperator` 的公开方法调用。 ## Demo 参考 ### `CSGOperationType` 以下示例文件中可以看到该 API 的实际调用方式: - `packages/demo/src/panels/GoldMineScene/DevelopmentMiningPanel.vue` - `packages/demo/src/panels/GoldMineScene/DrillingPanel.vue` - `packages/demo/src/panels/TunnelScene/RobotExcavationPanel.vue` - `packages/demo/src/views/TunnelScene.vue`