feat: 裁剪组裁剪跟随选择组移动
This commit is contained in:
@@ -15,18 +15,13 @@ export function buildLayerAssociations(layer, canvasObjects) {
|
||||
// 处理单个fabricObject关联
|
||||
if (layer.fabricObject) {
|
||||
// 如果图层已经有关联的fabricObject,确保它的layerId和layerName正确
|
||||
layer.fabricObject =
|
||||
canvasObjects.find((obj) => obj.id === layer.fabricObject.id) || null;
|
||||
layer.fabricObject = canvasObjects.find((obj) => obj.id === layer.fabricObject.id) || null;
|
||||
}
|
||||
|
||||
if (layer.clippingMask) {
|
||||
// clippingMask 可能是一个fabricObject或组 也可能是一个简单对象
|
||||
const clippingMaskObj = canvasObjects.find(
|
||||
(obj) => obj.id === layer.clippingMask.id
|
||||
);
|
||||
layer.clippingMask = clippingMaskObj
|
||||
? clippingMaskObj?.toObject?.(["id"])
|
||||
: layer.clippingMask;
|
||||
const clippingMaskObj = canvasObjects.find((obj) => obj.id === layer.clippingMask.id);
|
||||
layer.clippingMask = clippingMaskObj ? clippingMaskObj?.toObject?.(["id"]) : layer.clippingMask;
|
||||
}
|
||||
|
||||
// 处理多个fabricObjects关联
|
||||
@@ -172,10 +167,7 @@ export function simplifyLayers(layers) {
|
||||
opacity: layer.opacity,
|
||||
isBackground: layer.isBackground || false,
|
||||
isFixed: layer.isFixed || false,
|
||||
clippingMask:
|
||||
layer.clippingMask?.toObject?.(["id", "layerId"]) ||
|
||||
layer.clippingMask ||
|
||||
null, // 可能是一个fabricObject或组 也可能是一个简单对象
|
||||
clippingMask: layer.clippingMask?.toObject?.(["id", "layerId"]) || layer.clippingMask || null, // 可能是一个fabricObject或组 也可能是一个简单对象
|
||||
// ? {
|
||||
// id: layer.clippingMask.id,
|
||||
// type: layer.clippingMask.type,
|
||||
@@ -200,10 +192,7 @@ export function simplifyLayers(layers) {
|
||||
)
|
||||
.filter((obj) => obj !== null)
|
||||
: [],
|
||||
children:
|
||||
layer.children && isArray(layer.children)
|
||||
? simplifyLayers(layer.children)
|
||||
: [],
|
||||
children: layer.children && isArray(layer.children) ? simplifyLayers(layer.children) : [],
|
||||
};
|
||||
|
||||
return simplifiedLayer;
|
||||
@@ -240,9 +229,7 @@ export function restoreLayers(simplifiedLayers, canvasObjects) {
|
||||
|
||||
if (layer.clippingMask) {
|
||||
// clippingMask 可能是一个fabricObject或组 也可能是一个简单对象
|
||||
const clippingMaskObj = canvasObjects.find(
|
||||
(obj) => obj.id === layer.clippingMask.id
|
||||
);
|
||||
const clippingMaskObj = canvasObjects.find((obj) => obj.id === layer.clippingMask.id);
|
||||
restoredLayer.clippingMask = clippingMaskObj
|
||||
? clippingMaskObj?.toObject?.(["id"])
|
||||
: layer.clippingMask;
|
||||
@@ -250,17 +237,11 @@ export function restoreLayers(simplifiedLayers, canvasObjects) {
|
||||
|
||||
// 恢复单个fabricObject关联
|
||||
if (layer.fabricObject?.id) {
|
||||
const fabricObj = canvasObjects.find(
|
||||
(obj) => obj.id === layer.fabricObject.id
|
||||
);
|
||||
const fabricObj = canvasObjects.find((obj) => obj.id === layer.fabricObject.id);
|
||||
if (fabricObj) {
|
||||
fabricObj.layerId = layer.id;
|
||||
fabricObj.layerName = layer.name;
|
||||
restoredLayer.fabricObject = fabricObj.toObject([
|
||||
"id",
|
||||
"layerId",
|
||||
"type",
|
||||
]);
|
||||
restoredLayer.fabricObject = fabricObj.toObject(["id", "layerId", "type"]);
|
||||
} else {
|
||||
restoredLayer.fabricObject = null;
|
||||
}
|
||||
@@ -270,9 +251,7 @@ export function restoreLayers(simplifiedLayers, canvasObjects) {
|
||||
if (layer.fabricObjects && isArray(layer.fabricObjects)) {
|
||||
restoredLayer.fabricObjects = layer.fabricObjects
|
||||
.map((fabricRef) => {
|
||||
const fabricObj = canvasObjects.find(
|
||||
(obj) => obj.id === fabricRef.id
|
||||
);
|
||||
const fabricObj = canvasObjects.find((obj) => obj.id === fabricRef.id);
|
||||
if (fabricObj) {
|
||||
fabricObj.layerId = layer.id;
|
||||
fabricObj.layerName = layer.name;
|
||||
|
||||
Reference in New Issue
Block a user