280 lines
7.9 KiB
Markdown
280 lines
7.9 KiB
Markdown
---
|
||
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<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
|
||
- 作用:执行并集操作
|
||
|
||
- 入参:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
| --- | --- | --- | --- |
|
||
| `meshA` | `THREE.Mesh` | 是 | - 网格 A |
|
||
| `meshB` | `THREE.Mesh` | 是 | - 网格 B |
|
||
|
||
- 出参:`THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
- 返回说明:结果几何体
|
||
|
||
#### `subtract(meshA: THREE.Mesh, meshB: THREE.Mesh): THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
|
||
- 作用:执行差集操作 (A - B)
|
||
|
||
- 入参:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
| --- | --- | --- | --- |
|
||
| `meshA` | `THREE.Mesh` | 是 | - 被减去的网格 |
|
||
| `meshB` | `THREE.Mesh` | 是 | - 减去的网格 |
|
||
|
||
- 出参:`THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
- 返回说明:结果几何体
|
||
|
||
#### `reverseSubtract(meshA: THREE.Mesh, meshB: THREE.Mesh): THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
|
||
- 作用:执行反向差集操作 (B - A)
|
||
|
||
- 入参:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
| --- | --- | --- | --- |
|
||
| `meshA` | `THREE.Mesh` | 是 | - 网格 A |
|
||
| `meshB` | `THREE.Mesh` | 是 | - 网格 B |
|
||
|
||
- 出参:`THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
- 返回说明:结果几何体
|
||
|
||
#### `intersection(meshA: THREE.Mesh, meshB: THREE.Mesh): THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
|
||
- 作用:执行交集操作
|
||
|
||
- 入参:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
| --- | --- | --- | --- |
|
||
| `meshA` | `THREE.Mesh` | 是 | - 网格 A |
|
||
| `meshB` | `THREE.Mesh` | 是 | - 网格 B |
|
||
|
||
- 出参:`THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
- 返回说明:结果几何体
|
||
|
||
#### `difference(meshA: THREE.Mesh, meshB: THREE.Mesh): THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
|
||
- 作用:执行对称差集操作
|
||
|
||
- 入参:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
| --- | --- | --- | --- |
|
||
| `meshA` | `THREE.Mesh` | 是 | - 网格 A |
|
||
| `meshB` | `THREE.Mesh` | 是 | - 网格 B |
|
||
|
||
- 出参:`THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
- 返回说明:结果几何体
|
||
|
||
#### `hollowSubtract(meshA: THREE.Mesh, meshB: THREE.Mesh): THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
|
||
- 作用:执行空心差集操作 从 meshA 中减去 meshB,但只删除相交的面
|
||
|
||
- 入参:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
| --- | --- | --- | --- |
|
||
| `meshA` | `THREE.Mesh` | 是 | - 网格 A |
|
||
| `meshB` | `THREE.Mesh` | 是 | - 网格 B |
|
||
|
||
- 出参:`THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
- 返回说明:结果几何体
|
||
|
||
#### `hollowIntersection(meshA: THREE.Mesh, meshB: THREE.Mesh): THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
|
||
- 作用:执行空心交集操作 只保留相交部分的表面
|
||
|
||
- 入参:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
| --- | --- | --- | --- |
|
||
| `meshA` | `THREE.Mesh` | 是 | - 网格 A |
|
||
| `meshB` | `THREE.Mesh` | 是 | - 网格 B |
|
||
|
||
- 出参:`THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
- 返回说明:结果几何体
|
||
|
||
#### `operate(meshA: THREE.Mesh, meshB: THREE.Mesh, operation: CSGOperationType): THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
|
||
- 作用:通用 CSG 操作方法
|
||
|
||
- 入参:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
| --- | --- | --- | --- |
|
||
| `meshA` | `THREE.Mesh` | 是 | - 网格 A |
|
||
| `meshB` | `THREE.Mesh` | 是 | - 网格 B |
|
||
| `operation` | `CSGOperationType` | 是 | - CSG 操作类型 |
|
||
|
||
- 出参:`THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
- 返回说明:结果几何体
|
||
|
||
#### `subtractMultiple(meshA: THREE.Mesh, meshes: THREE.Mesh[]): THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
|
||
- 作用:批量执行差集操作 从 meshA 中减去多个网格
|
||
|
||
- 入参:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
| --- | --- | --- | --- |
|
||
| `meshA` | `THREE.Mesh` | 是 | - 被减去的网格 |
|
||
| `meshes` | `THREE.Mesh[]` | 是 | - 要减去的网格数组 |
|
||
|
||
- 出参:`THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
- 返回说明:结果几何体
|
||
|
||
#### `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<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
|
||
- 作用:统一的 CSG 操作执行方法
|
||
|
||
- 入参:
|
||
|
||
| 参数名 | 类型 | 必填 | 说明 |
|
||
| --- | --- | --- | --- |
|
||
| `meshA` | `THREE.Mesh` | 是 | - 网格 A |
|
||
| `meshB` | `THREE.Mesh` | 是 | - 网格 B |
|
||
| `operation` | `CSGOperationType` | 是 | - CSG 操作类型 |
|
||
|
||
- 出参:`THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>`
|
||
- 返回说明:结果几何体
|
||
|
||
## 构造示例
|
||
|
||
- 当前 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`
|
||
|