Javascript 如何在缩放期间将fabricjs边界框锁定到组

Javascript 如何在缩放期间将fabricjs边界框锁定到组,javascript,canvas,html5-canvas,fabricjs,bounding-box,Javascript,Canvas,Html5 Canvas,Fabricjs,Bounding Box,我将一些文本添加到正在缩放的画布中,当我缩放它时,文本不会停留在边界框中,而是移动到远低于或高于(取决于其缩放程度)的位置。我希望边界框停留在我附加了一些图像的文本周围 编辑:所有代码都已添加到底部 我所拥有的 我想要什么 因此,基本上我希望边界框保持在文本的中心,而不管曲线如何 注:所有字母都通过新结构添加到组中。如果有必要,请在for循环中输入文本 也可以忽略其单词的曲线 var group = new fabric.Group([],{ centeredRotat

我将一些文本添加到正在缩放的画布中,当我缩放它时,文本不会停留在边界框中,而是移动到远低于或高于(取决于其缩放程度)的位置。我希望边界框停留在我附加了一些图像的文本周围

编辑:所有代码都已添加到底部

我所拥有的

我想要什么

因此,基本上我希望边界框保持在文本的中心,而不管曲线如何

注:所有字母都通过新结构添加到组中。如果有必要,请在for循环中输入文本 也可以忽略其单词的曲线

   var group = new fabric.Group([],{
        centeredRotation: true,
        centeredScaling: true,
        top: 150,
        left: 150,
        height: 250,
        width: textWidth,
        angle: 0,
        // padding: -50
        // adjustPosition: 'center'
    });
    // for each character
    for (var i = 0; i < text.length; i += 1) {  
        // get the angular width of the text ++ added the scope spacing as well to eventually dynamically change the spacing of the letters
        aw = ctx.measureText(text[i]).width * pA + ($scope.spacing/1000);
        var xDx = Math.cos(a + aw / 2); // get the yAxies vector from the center x,y out
        var xDy = Math.sin(a + aw / 2);
        // is the text upside down. If it is flip it
        if (xDy < 0) {  
            // sets the transform for each character scaling width if needed
            transform = [-xDy * wScale, xDx * wScale,-xDx,-xDy, xDx * radius + x,xDy * radius + y];

        }else{
            transform = [-xDy * wScale, xDx * wScale, xDx, xDy, xDx * radius + x, xDy * radius + y];

        }


        if($scope.flipText === false){
            var letter = new fabric.Text(text[i],{
                id: 'letter',
                top: -180,
                left: -180,
                transformMatrix: [-xDy * wScale, xDx * wScale,-xDx,-xDy, xDx * radius + x,xDy * radius + y]
            });
        } else if($scope.flipText === true){
            var letter = new fabric.Text(text[i],{
                id: 'letter',
                top: -180,
                left: -180,
                transformMatrix: [-xDy * wScale, xDx * wScale, xDx, xDy, xDx * radius + x, xDy * radius + y]
            });
        }



        a += aw;

        group.add(letter);
        group.add(circle);
    }

    canvas.add(group);
    group.centerH();
var group=new fabric.group([]{
中心旋转:正确,
centeredScaling:正确,
排名:150,
左:150,
身高:250,
宽度:textWidth,
角度:0,
//填充:-50
//调整位置:“中心”
});
//对于每个字符
对于(var i=0;i
请添加您创建组时使用的代码。@AndreaBogazzi代码已添加到底部。我尝试过,但缺少太多变量,无法运行。不管怎么说,矩阵肯定是个问题。如果你想在织物中工作,你必须使用角度、比例、倾斜属性。@AndreaBogazzi你知道如何从变换中计算角度吗?它的数学是在我的头上更新到最新的fabric并使用fabric.util.qrDecompose()它将矩阵作为参数,并为您提供表示该变换的back-top、left、angle、skew、scale。然后使用always group.addWithUpdate而不是group.add如果你做了一把工作小提琴,我会尽力帮助你