Render line segments with a single point.

Fixes #2061. A line segment with a single point is now rendered as "M2,3Z"
rather than "M2,3", such that if there is an associated stroke-linecap, it is
displayed correctly.
This commit is contained in:
Mike Bostock 2015-11-09 08:49:45 -08:00
Родитель 7a46a88fba
Коммит cf038c0b68
4 изменённых файлов: 14 добавлений и 16 удалений

12
d3.js поставляемый
Просмотреть файл

@ -7344,10 +7344,8 @@
}
function treemap(d) {
var nodes = stickies || hierarchy(d), root = nodes[0];
root.x = 0;
root.y = 0;
root.dx = size[0];
root.dy = size[1];
root.x = root.y = 0;
if (root.value) root.dx = size[0], root.dy = size[1]; else root.dx = root.dy = 0;
if (stickies) hierarchy.revalue(root);
scale([ root ], root.dx * root.dy / root.value);
(stickies ? stickify : squarify)(root);
@ -8184,10 +8182,10 @@
value.closed = /-closed$/.test(key);
});
function d3_svg_lineLinear(points) {
return points.join("L");
return points.length > 1 ? points.join("L") : points + "Z";
}
function d3_svg_lineLinearClosed(points) {
return d3_svg_lineLinear(points) + "Z";
return points.join("L") + "Z";
}
function d3_svg_lineStep(points) {
var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
@ -8209,7 +8207,7 @@
return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension));
}
function d3_svg_lineCardinalClosed(points, tension) {
return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]),
return points.length < 3 ? d3_svg_lineLinearClosed(points) : points[0] + d3_svg_lineHermite((points.push(points[0]),
points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));
}
function d3_svg_lineCardinal(points, tension) {

10
d3.min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -104,11 +104,11 @@ d3_svg_lineInterpolators.forEach(function(key, value) {
// Linear interpolation; generates "L" commands.
function d3_svg_lineLinear(points) {
return points.join("L");
return points.length > 1 ? points.join("L") : points + "Z";
}
function d3_svg_lineLinearClosed(points) {
return d3_svg_lineLinear(points) + "Z";
return points.join("L") + "Z";
}
// Step interpolation; generates "H" and "V" commands.
@ -153,7 +153,7 @@ function d3_svg_lineCardinalOpen(points, tension) {
// Closed cardinal spline interpolation; generates "C" commands.
function d3_svg_lineCardinalClosed(points, tension) {
return points.length < 3
? d3_svg_lineLinear(points)
? d3_svg_lineLinearClosed(points)
: points[0] + d3_svg_lineHermite((points.push(points[0]), points),
d3_svg_lineCardinalTangents([points[points.length - 2]]
.concat(points, [points[1]]), tension));

Просмотреть файл

@ -149,7 +149,7 @@ suite.addBatch({
},
"supports a single-element array": function(line) {
var l = line().interpolate("bundle").tension(1);
assert.pathEqual(l([[0, 0]]), "M0,0");
assert.pathEqual(l([[0, 0]]), "M0,0Z");
}
},