fabric-texture
Version:
This JavaScript library enables fast and efficient image distortion transformations using Canvas 2D.
178 lines (112 loc) • 3.51 kB
Markdown
[**fabric-texture**](../../README.md)
***
# Class: `abstract` AbstractMode
贴图变形交互模式的抽象基类
定义了贴图变形的交互模式接口,所有具体的交互模式都需要继承此类。
该类提供了以下核心功能:
1. 变形时的分割点计算策略
2. 变形后的渲染处理
3. 交互控件的管理
## Example
```typescript
// 创建一个自定义的交互模式
class CustomMode extends AbstractMode {
// 设置模式名称
name = 'custom-mode';
// 自定义分割点计算策略
execute(texture: Texture) {
// 实现自定义的分割点计算逻辑
return super.execute(texture);
}
// 自定义渲染逻辑
render(fabricTexture: FabricTexture) {
// 实现自定义的渲染逻辑
const cleanup = super.render(fabricTexture);
// 添加自定义的交互元素
const customElement = new fabric.Rect({ ... });
fabricTexture.canvas.add(customElement);
// 返回清理函数
return () => {
cleanup?.();
fabricTexture.canvas.remove(customElement);
};
}
}
```
## Constructors
### new AbstractMode()
> **new AbstractMode**(): [`AbstractMode`](AbstractMode.md)
#### Returns
[`AbstractMode`](AbstractMode.md)
## Properties
### name
> `abstract` **name**: `string`
交互模式的唯一标识名称 用于区分不同的交互模式
## Methods
### dirtyRender()
> **dirtyRender**(`fabricTexture`): `void` \| () => `void`
渲染结构性变化的交互元素
仅在贴图结构发生变化时执行(如添加/删除分割点),用于:
1. 渲染结构相关的交互控件(如控制点)
2. 更新复杂的交互逻辑
3. 优化渲染性能
#### Parameters
##### fabricTexture
[`FabricTexture`](FabricTexture.md)
FabricTexture 实例
#### Returns
`void` \| () => `void`
返回清理函数,用于清理本次渲染创建的所有元素
#### Example
```typescript
class CustomMode extends AbstractMode {
dirtyRender(fabricTexture: FabricTexture) {
// 创建控制点
const controlPoints = createControlPoints();
// 添加到画布
fabricTexture.canvas.add(...controlPoints);
// 返回清理函数
return () => {
fabricTexture.canvas.remove(...controlPoints);
};
}
}
```
#### Remarks
与 render 不同,此方法在仅是控制点位置更新的情况下不会触发
***
### execute()
> **execute**(`texture`): `Coord`[][][]
计算变形区域的分割点
在变形操作时计算区域内的分割点位置。
默认使用贴图对象自带的分割策略,你可以:
1. 使用默认策略
2. 继承后重写该方法实现自定义策略
#### Parameters
##### texture
[`Texture`](Texture.md)
贴图对象实例
#### Returns
`Coord`[][][]
返回计算后的分割点坐标数组
***
### render()
> **render**(`fabricTexture`): `void` \| () => `void`
渲染变形后的贴图和基础交互元素
在每次贴图变形后执行,你可通过该方法处理以下事项:
1. 将变形后的贴图添加到画布
2. 添加基础的交互控件
3. 返回清理函数用于资源回收
#### Parameters
##### fabricTexture
[`FabricTexture`](FabricTexture.md)
FabricTexture 实例
#### Returns
`void` \| () => `void`
返回清理函数,用于清理本次渲染创建的所有元素
#### Remarks
1. 每次变形都会重新创建贴图对象
2. 需要在每次渲染时清理上一次的元素
3. 建议使用清理函数统一管理资源释放
#### See
dirtyRender 处理结构性变化的渲染