深度画布智能选区

This commit is contained in:
lzp
2026-03-25 11:27:24 +08:00
parent d657ca30ee
commit 2d5c02e191
10 changed files with 371 additions and 163 deletions

View File

@@ -25,6 +25,7 @@ fabric.Object.prototype.toObject = function () {
const object = this.toObject_(arr)
if (object.info) {
let lock = !!object.info.lock
if (object.type === "group") lock = true
object.evented = !lock
object.selectable = !lock
}
@@ -214,7 +215,13 @@ export class CanvasManager {
const obj = this.getObjectById(id)
if (!obj) return
if (obj.type === "group") {
const objects = [];
obj._originPosition = {
top: obj.top,
left: obj.left,
cpTop: obj.clipPath.top,
cpLeft: obj.clipPath.left,
}
const objects = [obj];
this.getObjects().forEach((item: any) => {
if (item?.info?.parentId === id) objects.push(item)
})
@@ -258,6 +265,9 @@ export class CanvasManager {
getObjectById(id: string) {
return this.getObjects().find((item: any) => item?.info?.id === id)
}
getChildObjectsById(id: string) {
return this.getObjects().filter((item: any) => item?.info?.parentId === id)
}
/** 获取选中对象 */
getSelectedObject() {
return this.canvas.getActiveObject()
@@ -285,6 +295,8 @@ export class CanvasManager {
const currentTool = this.stateManager.toolManager.currentTool.value;
if (currentTool === OperationType.DRAW) {
this.handleDrawImage(fabricImage)
} else if (currentTool === OperationType.AISELECT_DRAW) {
this.stateManager.aiSelectboxToolManager.handleBrushDrawImage(fabricImage)
}
return true
};
@@ -293,7 +305,7 @@ export class CanvasManager {
async handleDrawImage(fabricImage: fabric.Object) {
const activeID = this.stateManager.layerManager.activeID.value
const activeLayer = this.getObjectById(activeID)
if (activeLayer && activeLayer.fill?.repeat !== "repeat") {
if (activeLayer && activeLayer.fill?.repeat !== "repeat" && activeLayer.type !== "group") {
this.layerManager.imageMergeToLayer(activeLayer, fabricImage)
} else {
const emptyLayer = await this.layerManager.createEmptyLayer(false);