51 lines
1.1 KiB
JavaScript
51 lines
1.1 KiB
JavaScript
import { Command } from "./Command.js";
|
|
|
|
/**
|
|
* 对象移动命令
|
|
* 轻量级命令,只记录对象的移动属性变化(位置)
|
|
*/
|
|
export class ObjectMoveCommand extends Command {
|
|
constructor(options) {
|
|
super({
|
|
name: options.name || "对象移动",
|
|
description: options.description || "移动对象",
|
|
saveState: false, // 自己管理状态,避免递归
|
|
});
|
|
|
|
this.canvas = options.canvas;
|
|
this.initPos = options.initPos;
|
|
this.finalPos = options.finalPos;
|
|
}
|
|
|
|
/**
|
|
* 执行命令
|
|
*/
|
|
async execute() {
|
|
this.setObjectsPos(this.finalPos);
|
|
return true;
|
|
}
|
|
/**
|
|
* 撤销命令
|
|
* 应用初始状态
|
|
*/
|
|
async undo() {
|
|
this.setObjectsPos(this.initPos);
|
|
return true;
|
|
}
|
|
|
|
async setObjectsPos(pos) {
|
|
const objects = this.canvas.getObjects();
|
|
const arr = typeof pos === "object" ? [pos] : pos;
|
|
arr.forEach((item) => {
|
|
const obj = objects.find((o) => o.id === item.id);
|
|
if(obj) {
|
|
obj.set({
|
|
left: item.left,
|
|
top: item.top,
|
|
});
|
|
}
|
|
});
|
|
this.canvas.renderAll();
|
|
}
|
|
}
|