--- outline: [2, 3] --- # FractureEffect - 源文件:`packages/sdk/src/effect/FractureEffect.ts` - 文档位置:`packages/docs/api/effect/FractureEffect.md` ## 接口:`FractureEffectOptions` - 作用:FractureEffectOptions 的结构定义。 ### 字段 | 字段名 | 类型 | 必填 | 作用 | | --- | --- | --- | --- | | `points` | `THREE.Vector3[]` | 是 | 用于保存 `points` 的集合数据。 | | `curveType` | `'catmullrom' \| 'linear'` | 否 | 用于保存 `curveType` 对应的数据。 | | `tension` | `number` | 否 | 用于保存 `tension` 对应的数据。 | | `closed` | `boolean` | 否 | 用于标记 `closed` 的启用状态。 | | `spacing` | `number` | 否 | 用于保存 `spacing` 对应的数据。 | | `bufferRatio` | `number` | 否 | 用于保存 `bufferRatio` 对应的数据。 | | `minRadius` | `number` | 否 | 用于保存 `minRadius` 对应的数据。 | | `maxRadius` | `number` | 否 | 用于保存 `maxRadius` 对应的数据。 | | `animationDuration` | `number` | 否 | 用于保存 `animationDuration` 对应的数据。 | | `sphereAnimDuration` | `number` | 否 | 用于保存 `sphereAnimDuration` 对应的数据。 | | `sphereOpacity` | `number` | 否 | 用于保存 `sphereOpacity` 对应的数据。 | | `spheresVisible` | `boolean` | 否 | 用于标记 `spheresVisible` 的启用状态。 | | `cracksVisible` | `boolean` | 否 | 用于标记 `cracksVisible` 的启用状态。 | | `colorMode` | `'random' \| 'gradient' \| 'fixed'` | 否 | 用于保存 `colorMode` 对应的数据。 | | `fixedColor` | `number` | 否 | 用于保存 `fixedColor` 对应的数据。 | | `gradientStart` | `number` | 否 | 用于保存 `gradientStart` 对应的数据。 | | `gradientEnd` | `number` | 否 | 用于保存 `gradientEnd` 对应的数据。 | | `autoStart` | `boolean` | 否 | 用于标记 `autoStart` 的启用状态。 | | `crackModelUrls` | `string[]` | 否 | 用于保存 `crackModelUrls` 的集合数据。 | ## 类:`FractureEffect` - 作用:压裂效果 沿着一组点生成的曲线生成一系列带弹性动画的球体,模拟压裂过程 ### 构造函数 #### `new FractureEffect(options: FractureEffectOptions)` - 作用:创建 FractureEffect 实例。 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `options` | `FractureEffectOptions` | 是 | 当前功能对应的配置项。 | - 出参:`FractureEffect` - 返回说明:返回当前类实例。 ### 属性 | 属性名 | 可见性 | 类型 | 作用 | | --- | --- | --- | --- | | `options` | `public` | `Required` | 用于保存 `options` 对应的数据。 | | `active` | `public` | `boolean` | 用于标记 `active` 的启用状态。 | | `running` | `public` | `boolean` | 用于标记 `running` 的启用状态。 | | `spheres` | `public` | `FractureSphere[]` | 用于保存 `spheres` 的集合数据。 | | `group` | `public` | `THREE.Group` | 用于保存 `group` 对应的数据。 | | `crackModels` | `public` | `THREE.Object3D[]` | 用于保存 `crackModels` 的集合数据。 | | `crackModelTemplates` | `public` | `THREE.Object3D[]` | 用于保存 `crackModelTemplates` 的集合数据。 | | `progressCallback` | `public` | `((progress: number) => void) \| null` | 用于保存 `progressCallback` 对应的数据。 | | `curve` | `public` | `THREE.Curve \| null` | 用于保存 `curve` 对应的数据。 | ### 方法 #### `createCurve(): void` - 作用:根据点数组创建曲线 - 入参:无 - 出参:`void` - 返回说明:无返回值。 #### `onProgress(callback: (progress: number) => void): void` - 作用:设置进度回调 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `callback` | `(progress: number) => void` | 是 | 回调函数。 | - 出参:`void` - 返回说明:无返回值。 #### `start(): Promise` - 作用:开始压裂动画 - 入参:无 - 出参:`Promise` - 返回说明:返回 Promise,解析结果类型为 `void`。 #### `stop(): void` - 作用:停止动画 - 入参:无 - 出参:`void` - 返回说明:无返回值。 #### `clear(): void` - 作用:清除所有球体和裂缝模型 - 入参:无 - 出参:`void` - 返回说明:无返回值。 #### `showCracks(): void` - 作用:显示裂缝模型 - 入参:无 - 出参:`void` - 返回说明:无返回值。 #### `hideCracks(): void` - 作用:隐藏裂缝模型 - 入参:无 - 出参:`void` - 返回说明:无返回值。 #### `toggleCracks(): void` - 作用:切换裂缝模型显示 - 入参:无 - 出参:`void` - 返回说明:无返回值。 #### `showSpheres(): void` - 作用:显示球体 - 入参:无 - 出参:`void` - 返回说明:无返回值。 #### `hideSpheres(): void` - 作用:隐藏球体 - 入参:无 - 出参:`void` - 返回说明:无返回值。 #### `toggleSpheres(): void` - 作用:切换球体显示 - 入参:无 - 出参:`void` - 返回说明:无返回值。 #### `setOpacity(opacity: number): void` - 作用:设置球体透明度 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `opacity` | `number` | 是 | 参数 `opacity`,类型为 `number`。 | - 出参:`void` - 返回说明:无返回值。 #### `updatePoints(points: THREE.Vector3[]): void` - 作用:更新点数组 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `points` | `THREE.Vector3[]` | 是 | 参数 `points`,类型为 `THREE.Vector3[]`。 | - 出参:`void` - 返回说明:无返回值。 #### `restart(): Promise` - 作用:重新开始 - 入参:无 - 出参:`Promise` - 返回说明:返回 Promise,解析结果类型为 `void`。 #### `getSphereCount(): number` - 作用:获取球体数量 - 入参:无 - 出参:`number` - 返回说明:返回数值结果。 #### `getSpheres(): FractureSphere[]` - 作用:获取球体列表 - 入参:无 - 出参:`FractureSphere[]` - 返回说明:返回数组结果,元素类型为 `FractureSphere`。 #### `dispose(): void` - 作用:销毁 - 入参:无 - 出参:`void` - 返回说明:无返回值。 #### `loadCrackModels(): Promise` - 作用:加载裂缝模型模板 - 入参:无 - 出参:`Promise` - 返回说明:返回 Promise,解析结果类型为 `void`。 #### `getRandomHighContrastColor(): THREE.Color` - 作用:生成高对比度随机颜色 - 入参:无 - 出参:`THREE.Color` - 返回说明:返回 `THREE.Color`。 #### `getGradientColor(t: number): THREE.Color` - 作用:根据位置获取渐变颜色 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `t` | `number` | 是 | 参数 `t`,类型为 `number`。 | - 出参:`THREE.Color` - 返回说明:返回 `THREE.Color`。 #### `getSphereColor(t: number): THREE.Color` - 作用:获取球体颜色 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `t` | `number` | 是 | 参数 `t`,类型为 `number`。 | - 出参:`THREE.Color` - 返回说明:返回 `THREE.Color`。 #### `easeOutElastic(x: number): number` - 作用:缓动函数 - easeOutElastic - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `x` | `number` | 是 | 参数 `x`,类型为 `number`。 | - 出参:`number` - 返回说明:返回数值结果。 #### `animateSphereIn(sphere: THREE.Mesh): Promise` - 作用:球体弹入动画 - 入参: | 参数名 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | | `sphere` | `THREE.Mesh` | 是 | 参数 `sphere`,类型为 `THREE.Mesh`。 | - 出参:`Promise` - 返回说明:返回 Promise,解析结果类型为 `void`。 #### `calculatePositions(): { position: THREE.Vector3; t: number; index: number; }[]` - 作用:计算球体位置 - 入参:无 - 出参:`{ position: THREE.Vector3; t: number; index: number; }[]` - 返回说明:返回数组结果,元素类型为 `{ position: THREE.Vector3; t: number; index: number; }`。 ## 构造示例 - 来源:`packages/demo/src/panels/GeothermalScene/DirectionalReservoir.vue` ```ts const points = [ new THREE.Vector3(1.5, -0.3, 1.5), new THREE.Vector3(0, -0.3, 0) ] effect = new FractureEffect({ points: points, curveType: 'catmullrom', tension: 0.5, spacing: 0.1, // 增大间距 bufferRatio: 0.02, closed: false, // 不闭合,形成螺旋 spheresVisible: showRuptureSpheres.value, cracksVisible: showFractures.value }); ``` - 来源:`packages/demo/src/panels/OilGasScene/FracturingPanel.vue` ```ts const points = generateSpiralPoints(); effect = new FractureEffect({ points: points, curveType: 'catmullrom', tension: 0.5, spacing: 0.2, // 增大间距 bufferRatio: 0.02, closed: false, // 不闭合,形成螺旋 spheresVisible: showRuptureSpheres.value, cracksVisible: showFractures.value }); ``` ## 函数示例 ### `FractureEffect.onProgress` - 来源:`packages/demo/src/panels/GeothermalScene/DirectionalReservoir.vue` ```ts effect = new FractureEffect({ points: points, curveType: 'catmullrom', tension: 0.5, spacing: 0.1, // 增大间距 bufferRatio: 0.02, closed: false, // 不闭合,形成螺旋 spheresVisible: showRuptureSpheres.value, cracksVisible: showFractures.value }); isRunning.value = true; effect.onProgress((progress) => { if (progress >= 1) isRunning.value = false; }); ``` ### `FractureEffect.showCracks` - 来源:`packages/demo/src/panels/GeothermalScene/DirectionalReservoir.vue` ```ts if (effect) { if (showFractures.value) effect.showCracks(); else effect.hideCracks(); } isRunning.value = false; }; ``` ### `FractureEffect.showSpheres` - 来源:`packages/demo/src/panels/GeothermalScene/DirectionalReservoir.vue` ```ts if (!effect) return; if (val) effect.showSpheres(); else effect.hideSpheres(); }); ``` ## Demo 参考 ### `FractureEffect` 以下示例文件中可以看到该 API 的实际调用方式: - `packages/demo/src/panels/GeothermalScene/DirectionalReservoir.vue` - `packages/demo/src/panels/OilGasScene/FracturingPanel.vue`