Files
aida_front/src/component/Canvas/CanvasEditor/commands/NonUndoableCommands.js
X1627315083 c266967f16 接入画布
2025-06-09 10:25:54 +08:00

104 lines
2.2 KiB
JavaScript

/**
* 查询类命令示例 - 不需要撤销
*/
export class GetCanvasInfoCommand {
constructor(options) {
this.canvas = options.canvas;
this.layerManager = options.layerManager;
this.undoable = false; // 明确标记为不可撤销
}
execute() {
return {
width: this.canvas.getWidth(),
height: this.canvas.getHeight(),
zoom: this.canvas.getZoom(),
layers: this.layerManager?.getLayers()?.length || 0,
objects: this.canvas.getObjects().length,
};
}
// 查询类命令不需要实现 undo 方法
}
/**
* 导出类命令示例 - 不需要撤销
*/
export class ExportCanvasCommand {
constructor(options) {
this.canvas = options.canvas;
this.format = options.format || "png";
this.quality = options.quality || 1;
this.undoable = false;
}
execute() {
return this.canvas.toDataURL(`image/${this.format}`, this.quality);
}
}
/**
* 验证类命令示例 - 不需要撤销
*/
export class ValidateCanvasCommand {
constructor(options) {
this.canvas = options.canvas;
this.undoable = false;
}
execute() {
const objects = this.canvas.getObjects();
const errors = [];
objects.forEach((obj, index) => {
if (!obj.left || !obj.top) {
errors.push(`对象 ${index} 位置无效`);
}
if (obj.width <= 0 || obj.height <= 0) {
errors.push(`对象 ${index} 尺寸无效`);
}
});
return {
isValid: errors.length === 0,
errors,
objectCount: objects.length,
};
}
}
/**
* 系统清理命令示例 - 不可逆操作,不需要撤销
*/
export class CleanupTempDataCommand {
constructor(options) {
this.canvas = options.canvas;
this.undoable = false;
}
execute() {
// 清理临时数据
const cleaned = [];
// 移除无效对象
const objects = this.canvas.getObjects();
objects.forEach((obj, index) => {
if (obj._isTemp || obj._invalid) {
this.canvas.remove(obj);
cleaned.push(`临时对象 ${index}`);
}
});
// 清理缓存
if (this.canvas._clearCache) {
this.canvas._clearCache();
cleaned.push("画布缓存");
}
return {
cleaned,
count: cleaned.length,
};
}
}