【发布时间】:2015-12-24 06:53:16
【问题描述】:
我想在路径上应用平移旋转和缩放后获得新的路径(弧)点。 我举个例子:
我的路径是这样显示的
如你所见,我的路径上应用了翻译、旋转和缩放。
我正在使用此代码通过 translate(0,0) rotate(0,0,0) 和 scale(0,0) 获取新路径 我使用 matrixTransform(sCTM) 方法来获取新点应用新的变换和缩放后的线。 但是在弧的情况下,我没有找到正确的路径。
var path = d3.select("g")[0][0]; // Get g tag
var d = "";
// console.log(path.select('path').getAttr('d'));
var sCTM = path.getCTM(); // get transform data
var svgRoot = path.ownerSVGElement // get svg tag
var pathId = d3.select("g path")[0][0]; // get path
var segList = pathId.pathSegList //
var segs = segList.numberOfItems
//---change segObj values
// create D after apply transform elements
for (var k = 0; k < segs; k++) {
var segObj = segList.getItem(k)
if (segObj.x && segObj.y) {
var mySVGPoint = svgRoot.createSVGPoint();
mySVGPoint.x = segObj.x
mySVGPoint.y = segObj.y
mySVGPointTrans = mySVGPoint.matrixTransform(sCTM)
console.log("testing my object",mySVGPointTrans);
segObj.x = mySVGPointTrans.x;
segObj.y = mySVGPointTrans.y;
d = d + segObj.pathSegTypeAsLetter + mySVGPointTrans.x + "," + mySVGPointTrans.y;
}
}
d3..select("g").select("path").attr("d",d);
//---force removal of transform--
path.setAttribute("transform", "translate(0,0)rotate(0,0,0)skewX(0)scale(1,1)");
【问题讨论】:
-
你已经标记了 Snap,snapsvg.io/docs/#Snap.path.map 可能会帮助你吗?
-
最好是创建一个小提琴或其他我们可以运行的东西。我不清楚问题是什么。