无法维护fabricjs组元素的strokeWidth

Unable to maintain strokeWidth for fabricjs group element

本文关键字:元素 strokeWidth fabricjs 维护      更新时间:2023-09-26

嗨,我正在开发fabricjs库,遇到了一个bug。

我正在画一组文本和矩形,然后重新调整大小。但我看到group@borders的大小随着重新调整而增加。但我希望strokeWidth自始至终都是相同的。

Fiddle来了!。

代码:`

var gCanvas = new fabric.Canvas('canvDraw');
 gCanvas.setWidth(500);
 gCanvas.setHeight(500);
var myEllipse = new fabric.Ellipse({
top: 250,
left: 100,
rx: 75,
ry: 50,
fill: '#999999',
stroke: '#000000',
strokeWidth: 2
});
var myText = new fabric.Text("Some text", {
top: 250,
left: 250,
});

// set up a listener for the event where the object has been modified
gCanvas.observe('object:modified', function (e) {
var objects = gCanvas.getObjects();
for (i in objects) {
    console.log(objects[i]);
    objects[i].strokeWidth = 2;
}
}); 
var group = new fabric.Group([ myEllipse, myText ], {borderColor: 'black', cornerColor: 'green'});
gCanvas.add(group);`

Se更新了fiddlehttp://jsfiddle.net/6CDFr/264/用于动态笔划宽度变化。

gCanvas.observe('object:modified', function (e) {
var myObject = e.target;
if (!myObject._objects) {
  return;
}
for (i in myObject._objects) {
    objects[i].strokeWidth = 2 / Math.sqrt(myObject.scaleX * myObject.scaleY);
}
});

小心,我删除了几个canvas.add();。您不应该同时将对象添加到画布和组中。

Mantain还提供文本尺寸:

gCanvas.observe('object:added', function (e) {
    if (e.target.type === 'text' || e.target.type === 'i-text') {
        e.target.originalFontsize = e.target.fontSize;
    }
});
gCanvas.observe('object:modified', function (e) {
var myObject = e.target;
if (!myObject._objects) {
  return;
}
for (i in myObject._objects) {
    var obj = myObject._objects[i];
    var scaleFactor = Math.sqrt(myObject.scaleX * myObject.scaleY);
    obj.strokeWidth = 2 / scaleFactor;
    if (obj.type === 'text' || obj.type === 'i-text') {
        obj.fontSize = obj.originalFontsize / scaleFactor;
    }
}
});

查看更新的fiddlehttp://jsfiddle.net/6CDFr/269/