From 55ede508cb8d9e1cb4374a21a4ea3d64b52766db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E9=B9=8F?= <2916022834@qq.com> Date: Fri, 23 Jan 2026 15:41:43 +0800 Subject: [PATCH] 111 --- .../Canvas/CanvasEditor/managers/CanvasManager.js | 6 +++++- src/component/Canvas/OverallCanvas/index.vue | 8 +++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/component/Canvas/CanvasEditor/managers/CanvasManager.js b/src/component/Canvas/CanvasEditor/managers/CanvasManager.js index fdc87410..07651777 100644 --- a/src/component/Canvas/CanvasEditor/managers/CanvasManager.js +++ b/src/component/Canvas/CanvasEditor/managers/CanvasManager.js @@ -1179,6 +1179,7 @@ backgroundObject.scaleY,'CanvasManager resetCanvasSizeByFixedLayer') blendMode: v.globalCompositeOperation, gapX: 0,// 平铺模式下的间距 gapY: 0,// 平铺模式下的间距 + fill_repeat: "", } } let left = (v.left - (flLeft - flWidth * flScaleX / 2)); @@ -1222,6 +1223,7 @@ backgroundObject.scaleY,'CanvasManager resetCanvasSizeByFixedLayer') obj.location = [left, top]; obj.object.gapX = fill_.gapX; obj.object.gapY = fill_.gapY; + obj.object.fill_repeat = fill.repeat; } if(sourceData.type === "print"){ prints.push(obj); @@ -1730,6 +1732,7 @@ backgroundObject.scaleY,'CanvasManager resetCanvasSizeByFixedLayer') let flipX = false; let flipY = false; let blendMode = BlendMode.MULTIPLY; + let fill_repeat = "repeat" if(item.object){ top += item.object.top * flScaleY left += item.object.left * flScaleX @@ -1743,6 +1746,7 @@ backgroundObject.scaleY,'CanvasManager resetCanvasSizeByFixedLayer') gapX = item.object.gapX gapY = item.object.gapY fillSource = imageAddGapToCanvas(image, gapX, gapY); + if(item.object.fill_repeat) fill_repeat = item.object.fill_repeat; } let rect = new fabric.Rect({ id: id, @@ -1761,7 +1765,7 @@ backgroundObject.scaleY,'CanvasManager resetCanvasSizeByFixedLayer') globalCompositeOperation: blendMode, fill: new fabric.Pattern({ source: fillSource, - repeat: "repeat", + repeat: fill_repeat, patternTransform: createPatternTransform(scale, item.angle || 0), offsetX: offsetX, // 水平偏移 offsetY: offsetY, // 垂直偏移 diff --git a/src/component/Canvas/OverallCanvas/index.vue b/src/component/Canvas/OverallCanvas/index.vue index 39f652ce..07a39d9b 100644 --- a/src/component/Canvas/OverallCanvas/index.vue +++ b/src/component/Canvas/OverallCanvas/index.vue @@ -25,6 +25,7 @@ O_FLIPX: "object.flipX", O_FLIPY: "object.flipY", O_BLENDMODE: "object.blendMode", + O_FILL_REPEAT: "object.fill_repeat", }; const ACTIONS = { ADD: "add", @@ -202,9 +203,9 @@ let scaleY = ((cheight / image.height) * item.scale[1]) / 5; let scale = cwidth > cheight ? scaleX : scaleY; let offsetX = - (item.location[0] * cwidth) / props.width - (image.width * scale) / 2; + (item.location[0] * cwidth) / props.width + (image.width * scale) / 2; let offsetY = - (item.location[1] * cheight) / props.height - + (item.location[1] * cheight) / props.height + (image.height * scale) / 2; let angle = item.angle; let gapX = item.object.gapX; @@ -223,7 +224,7 @@ ctx.drawImage(image, 0, 0); let pattern = new fabric.Pattern({ source: tcanvas, - repeat: "repeat", + repeat: item.object?.fill_repeat || "repeat", patternTransform, offsetX, // 水平偏移 offsetY, // 垂直偏移 @@ -281,6 +282,7 @@ case KEYS.FILL_SCALEY: case KEYS.FILL_GAPX: case KEYS.FILL_GAPY: + case KEYS.O_FILL_REPEAT: let pattern = await setFill( list.value.find((v) => v.token === item.token) );