围绕曲线弯曲 SVG `<g>`
Bend SVG `<g>` around Curve
我正在使用 D3.js 在直线上绘制一些 SVG <path>
。所有这些元素都包含在具有相同垂直变换的 <g>
中。
我想"wrap"将这些元素绕成一个圆弧。最后,每个矩形应该成为一小段圆弧,垂直线将指向圆心。
我意识到我可能从一开始就在弧形中执行此操作:例如,绘制端到端的粗圆线段而不是矩形。然而,这听起来像是大量的数学和计算,尤其是对于 SVG 新手而言。
有没有办法将这些元素转换成曲线 post hoc,这意味着我可以使用我拥有的绘制这些矩形的代码——也许通过改变transform
属性?如果有外部 SVG 库(虽然我没有找到成功),我也会考虑使用它。
比使用 path arc 命令更容易 A
——虽然这不是我所希望的,因为它不能变形围绕一个圆排成一行的元素——我发现 d3.arc()
(以前 d3.svg.arc()
).
canvas.selectAll(".xContainer")
.selectAll("path")
.data(...)
.enter()
.append("path")
.attr("fill", function(element, index) { return colorForSize(element[4]); })
.attr("d", function(element, index) {
var arc = d3.arc()
.innerRadius(iR)
.outerRadius(iR + 10)
.startAngle(element[1])
.endAngle(element[2])
.cornerRadius(isRounded ? 8 : 0);
return arc();
});
谢谢,Bill。
我正在使用 D3.js 在直线上绘制一些 SVG <path>
。所有这些元素都包含在具有相同垂直变换的 <g>
中。
我想"wrap"将这些元素绕成一个圆弧。最后,每个矩形应该成为一小段圆弧,垂直线将指向圆心。
我意识到我可能从一开始就在弧形中执行此操作:例如,绘制端到端的粗圆线段而不是矩形。然而,这听起来像是大量的数学和计算,尤其是对于 SVG 新手而言。
有没有办法将这些元素转换成曲线 post hoc,这意味着我可以使用我拥有的绘制这些矩形的代码——也许通过改变transform
属性?如果有外部 SVG 库(虽然我没有找到成功),我也会考虑使用它。
比使用 path arc 命令更容易 A
——虽然这不是我所希望的,因为它不能变形围绕一个圆排成一行的元素——我发现 d3.arc()
(以前 d3.svg.arc()
).
canvas.selectAll(".xContainer")
.selectAll("path")
.data(...)
.enter()
.append("path")
.attr("fill", function(element, index) { return colorForSize(element[4]); })
.attr("d", function(element, index) {
var arc = d3.arc()
.innerRadius(iR)
.outerRadius(iR + 10)
.startAngle(element[1])
.endAngle(element[2])
.cornerRadius(isRounded ? 8 : 0);
return arc();
});
谢谢,Bill。