d3.js:画笔有 d3.svg.area 个问题

d3.js: paintbrush with d3.svg.area problems

我正在尝试制作一个工具来绘制任意图形,如本例所示 - Line Drawing, but using path itself with fill - not stroke. Here is what i already done - https://jsfiddle.net/zeleniy/b14paam2/。例子中已经包含单条任意路径图,大家可以自己拖拽绘制。

如您所见,有两个问题:

  1. 笔尖是倾斜的我不知道为什么。因此,当从右上角到左下角绘制对角线时,反之亦然,路径几乎不可见。

  2. 在路径相交的地方没有填充。

如何解决这个问题?

可以用线代替面,更适合画笔

var path;

var area = d3.svg.line()
  .x(function(d) { return d[0]; })
  .y(function(d) { return d[1]; })
  .tension(0)
  .interpolate("basis");

var svg = d3.select("svg")
 .call(d3.behavior.drag()
  .on("dragstart", dragstarted)
    .on("drag", dragged)
    .on("dragend", dragended));

function dragstarted() {
  path = svg.append("path").datum([]).attr("class", "line")
     .attr({
         "fill": "none",
          "stroke": "lightblue",
          "stroke-width": 25 + "px",
          "stroke-linejoin": "round"
        });
}

function dragged() {
  path.datum().push(d3.mouse(this));
  path.attr("d", area);
}

function dragended() {
  path = null;
}
svg {
  border: 2px solid gray;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.3.13/d3.min.js"></script>
<h2>Paint with brush</h2>
<svg width="100%" height="300px"></svg>