捕捉具有旋转的SVG translate元素

捕捉具有旋转的SVG translate元素,svg,rotation,transformation,snap.svg,Svg,Rotation,Transformation,Snap.svg,我正在尝试移动(平移)一个已经旋转的对象,当我移动(平移)旋转的对象时,它会失去旋转,并正确移动。如果在未旋转的对象上使用相同的代码,则将正确移动。我做错了什么 这是 此代码将丢失旋转 var part = s.select("#part_2"); var t = new Snap.Matrix(); t.translate(part.getBBox().x,part.getBBox().y+18); part.transform(t); 我不确定您希望转换应用的顺序。如果你想让正方形移动,这

我正在尝试移动(平移)一个已经旋转的对象,当我移动(平移)旋转的对象时,它会失去旋转,并正确移动。如果在未旋转的对象上使用相同的代码,则将正确移动。我做错了什么

这是

此代码将丢失旋转

var part = s.select("#part_2");
var t = new Snap.Matrix();
t.translate(part.getBBox().x,part.getBBox().y+18);
part.transform(t);

我不确定您希望转换应用的顺序。如果你想让正方形移动,这样在变换后应用向下,即旋转矩阵的向下角度,你可以这样做

    var t = part.transform().localMatrix;
    t.translate(0, 18);
    part.transform(t);
如果,不管你怎么想,你总是要沮丧,那么你会做这样的事情

    var t = new Snap.Matrix();
    t.translate(0, 18);
    t.add(part.transform().localMatrix);
    part.transform(t);

诀窍是获取形状的现有矩阵,并向其附加/预加所需的变换。

我不确定要应用的变换顺序。如果你想让正方形移动,这样在变换后应用向下,即旋转矩阵的向下角度,你可以这样做

    var t = part.transform().localMatrix;
    t.translate(0, 18);
    part.transform(t);
如果,不管你怎么想,你总是要沮丧,那么你会做这样的事情

    var t = new Snap.Matrix();
    t.translate(0, 18);
    t.add(part.transform().localMatrix);
    part.transform(t);

诀窍是获取形状的现有矩阵,并向其附加/预加所需的变换。

然后t.add(part.transform().localMatrix);基本上只是将转换添加到现有转换,或者清除现有转换?是的,localMatrix是现有转换。这正是我需要的,还修复了我在应用程序中遇到的一些其他问题。这是使用Inkscape SVG输出的关键,但我在其他地方找不到这些信息。泰!然后t.add(part.transform().localMatrix);基本上只是将转换添加到现有转换,或者清除现有转换?是的,localMatrix是现有转换。这正是我需要的,还修复了我在应用程序中遇到的一些其他问题。这是使用Inkscape SVG输出的关键,但我在其他地方找不到这些信息。泰!