奇妙なことに、なぜラファエルがこれを選択したのかわかりません。しかし、回避するのはそれほど難しくありません:
.transformPath()メソッドのソースを調べると、他の2つのユーティリティメソッドの複合であることがわかります。
transformPath = R.transformPath = function (path, transform) {
return mapPath(path, toMatrix(path, transform));
}
非常に簡単です。.toMatrix()は、文字列を行列に変換する解析を行い、mapPathはその行列をパス文字列に適用します。
何らかの理由で、mapPathには.path2curve()メソッドへの呼び出しが含まれているため、問題が発生しています。したがって、そのメソッドのソースを取得して変更する必要があります。
var mapPathStraight = function (path, matrix) {
if (!matrix) {
return path;
}
var x, y, i, j, ii, jj, pathi;
//replace following line with .parsePathString(), which also parses path string into an array without adding curves
//path = path2curve(path);
path = Raphael.parsePathString(path);
for (i = 0, ii = path.length; i < ii; i++) {
pathi = path[i];
for (j = 1, jj = pathi.length; j < jj; j += 2) {
x = matrix.x(pathi[j], pathi[j + 1]);
y = matrix.y(pathi[j], pathi[j + 1]);
pathi[j] = x;
pathi[j + 1] = y;
}
}
return path;
};
これで、次のような直線を作成できます。
var trpath = mapPathStraight(path, Raphael.toMatrix(path, trans));
これは私に次の出力を与えます:
trpath: M100,110L140,150
これがjsFiddleです