Skip to content

Commit 2f82165

Browse files
committed
adding step-middle as interpolation method
1 parent 1810583 commit 2f82165

2 files changed

Lines changed: 17 additions & 0 deletions

File tree

src/svg/line.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ var d3_svg_lineInterpolators = d3.map({
9292
"linear": d3_svg_lineLinear,
9393
"linear-closed": d3_svg_lineLinearClosed,
9494
"step-before": d3_svg_lineStepBefore,
95+
"step-middle": d3_svg_lineStepMiddle,
9596
"step-after": d3_svg_lineStepAfter,
9697
"basis": d3_svg_lineBasis,
9798
"basis-open": d3_svg_lineBasisOpen,
@@ -127,6 +128,16 @@ function d3_svg_lineStepBefore(points) {
127128
return path.join("");
128129
}
129130

131+
// Step interpolation; generates "H" and "V" commands.
132+
function d3_svg_lineStepMiddle(points) {
133+
var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
134+
while (++i < n) {
135+
var prev = points[i-1], p = points[i];
136+
path.push("H", (p[0] - prev[0])/2 + prev[0], "V", p[1], "H", p[0]);
137+
}
138+
return path.join("");
139+
}
140+
130141
// Step interpolation; generates "H" and "V" commands.
131142
function d3_svg_lineStepAfter(points) {
132143
var i = 0,

test/svg/line-test.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,12 @@ suite.addBatch({
9393
assert.pathEqual(l([[0, 0], [1, 1]]), "M0,0V1H1");
9494
assert.pathEqual(l([[0, 0], [1, 1], [2, 0]]), "M0,0V1H1V0H2");
9595
},
96+
"supports step-middle interpolation": function(line) {
97+
var l = line().interpolate("step-middle");
98+
assert.pathEqual(l([[0, 0]]), "M0,0");
99+
assert.pathEqual(l([[0, 0], [1, 1]]), "M0,0H0.5V1H1");
100+
assert.pathEqual(l([[0, 0], [1, 1], [2, 0]]), "M0,0H0.5V1H1H1.5V0H2");
101+
},
96102
"supports step-after interpolation": function(line) {
97103
var l = line().interpolate("step-after");
98104
assert.pathEqual(l([[0, 0]]), "M0,0");

0 commit comments

Comments
 (0)