如何在弧形路径元素的两端获得箭头?

时间:2013-07-08 10:15:43

标签: svg d3.js

我正在使用d3.svg.arc()绘制一个圆的一段,将内半径和外半径设置为相同并具有一些随机扫描角度。现在我想在它的两端都有箭头。 marker-start属性工作正常。但问题在于标记结束。当我运行代码时,我在开始时获得两个标记。请帮帮我。

<svg version="1.1">
<defs>
    <marker id="endtriangle"
  viewBox="0 0 10 10" refX="0" refY="5" 
  markerUnits="strokeWidth"
  markerWidth="4" markerHeight="3"
  orient="auto">
    <path d="M 0 0 L 10 5 L 0 10 z" />
    </marker>
    <marker id="starttriangle"
  viewBox="0 0 10 10" refX="5" refY="5" 
  markerUnits="strokeWidth"
  markerWidth="4" markerHeight="3"
  orient="auto">
    <path d="M -2 5 L 8 0 L 8 10 z" />
    </marker>
</defs>
</svg>
<script type="text/javascript">
var arc=d3.svg.arc()
    .innerRadius(140)
    .outerRadius(140)
    .startAngle(0)
    .endAngle(Math.PI/3)
d3.select("svg").append("path")
        .attr("d",arc)
        .attr("transform","translate(200,200)")
        .attr("stroke","black")
        .attr("marker-end","url(#endtriangle)")
        .attr("marker-start","url(#starttriangle)")
        .attr("fill","none")
        .attr("stroke-width","10")
        .attr("id","dimen")
</script>
</body>

1 个答案:

答案 0 :(得分:1)

这似乎是因为D3生成了一个不直接适合这种用例的弧形路径。

以下是删除大约一半生成的弧形路径数据(d属性)的示例:http://jsfiddle.net/MQNXZ/

顶部路径使用您的示例,底部路径使用已清理的静态版本。与D3路径数据相比的差异在于D3变体包括一个额外的直线命令,几个弧命令和一个关闭路径命令。