Files
FiDA_Front/src/components/Canvas/DepthCanvas/manager/ToolManager.ts

70 lines
1.6 KiB
TypeScript
Raw Normal View History

2026-03-09 13:44:32 +08:00
import { ref } from 'vue'
import { OperationType } from '../tools/layerHelper'
2026-03-06 15:50:05 +08:00
export class ToolManager {
stateManager: any
2026-03-09 13:44:32 +08:00
canvasManager: any
currentTool: any
tools: any[]
2026-03-06 15:50:05 +08:00
constructor(options) {
this.stateManager = options.stateManager;
2026-03-09 13:44:32 +08:00
this.canvasManager = options.canvasManager;
this.currentTool = ref(null)
this.tools = [
/** 选择工具 */
{
name: OperationType.SELECT,
cursor: "default",
setup: this.setupSelectTool.bind(this),
selection: true,
},
/** 移动工具 */
{
name: OperationType.PAN,
cursor: "grab",
setup: this.setupMoveTool.bind(this),
},
/** 画笔工具 */
{
name: OperationType.DRAW,
cursor: "crosshair",
},
/** 橡皮擦工具 */
{
name: OperationType.ERASER,
cursor: "crosshair",
},
/** 智能选框工具 */
{
name: OperationType.SELECTBOX,
cursor: "crosshair",
},
/** 矩形工具 */
{
name: OperationType.RECTANGLE,
cursor: "crosshair",
},
]
2026-03-06 15:50:05 +08:00
}
setTool(value: string) {
2026-03-09 13:44:32 +08:00
const tool = this.tools.find((t) => t.name === value)
2026-03-06 15:50:05 +08:00
if (!tool) return console.warn(`工具${tool}不存在`)
2026-03-09 13:44:32 +08:00
this.currentTool.value = tool.name
this.canvasManager.canvas.defaultCursor = tool.cursor
this.setCanvasEvented(!!tool.selection)
this.canvasManager.canvas.isDragging = !!tool.isDragging
2026-03-06 15:50:05 +08:00
2026-03-09 13:44:32 +08:00
if (tool.setup) tool.setup()
}
// 切换工具时,设置画布事件
setCanvasEvented(value: boolean) {
this.canvasManager.canvas.selection = value
this.canvasManager.canvas.getObjects().forEach((v) => v.evented = value)
}
/** 选择工具 */
setupSelectTool() {
}
/** 移动工具 */
setupMoveTool() {
}
2026-03-06 15:50:05 +08:00
}