奇怪,不確定拉斐爾爲什麼選擇這樣做。但是不可過於用力要解決:如果您諮詢the source的.transformPath()方法
,你會看到,它是其他兩個實用方法的複合材料:
transformPath = R.transformPath = function (path, transform) {
return mapPath(path, toMatrix(path, transform));
}
漂亮的直線前進:.toMatrix()將該變換字符串解析爲矩陣,mapPath將該矩陣應用於路徑字符串。
出於某種原因,mapPath包含對.path2curve() method的調用,這就是您遇到問題的原因。因此,我們需要grab the source該法並修改它:
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
對不起,延遲。非常感謝你,這真的很好! – Rascar
發現這非常有用,但是在某些情況下,需要使用.path2curve()方法。特別是嘗試「M100,100A100,100,0,1,0,101,100」,當你嘗試渲染時,你會得到NaN的結果和一個令人討厭的錯誤。 – Charles