Add x0 & x1 accessors to d3.svg.area.
Thanks for the inspiration, @strongh!
This commit is contained in:
Родитель
b5465489e7
Коммит
906e7eefc3
|
@ -3111,51 +3111,68 @@ function d3_svg_lineMonotone(points) {
|
|||
d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
|
||||
}
|
||||
d3.svg.area = function() {
|
||||
var x = d3_svg_lineX,
|
||||
var x0 = d3_svg_lineX,
|
||||
x1 = d3_svg_lineX,
|
||||
y0 = 0,
|
||||
y1 = d3_svg_lineY,
|
||||
interpolate = "linear",
|
||||
interpolator = d3_svg_lineInterpolators[interpolate],
|
||||
tension = .7;
|
||||
|
||||
// TODO horizontal / vertical / radial orientation
|
||||
|
||||
function area(d) {
|
||||
if (d.length < 1) return null;
|
||||
var points1 = d3_svg_linePoints(this, d, x, y1),
|
||||
points0 = d3_svg_linePoints(this, d, d3_svg_areaX(points1), y0).reverse();
|
||||
var points0 = d3_svg_linePoints(this, d, x0, y0),
|
||||
points1 = d3_svg_linePoints(this, d, x0 === x1 ? d3_svg_areaX(points0) : x1, y0 === y1 ? d3_svg_areaY(points0) : y1);
|
||||
return "M" + interpolator(points1, tension)
|
||||
+ "L" + interpolator(points0, tension)
|
||||
+ "L" + interpolator(points0.reverse(), tension)
|
||||
+ "Z";
|
||||
}
|
||||
|
||||
area.x = function(v) {
|
||||
if (!arguments.length) return x;
|
||||
x = v;
|
||||
area.x = function(x) {
|
||||
if (!arguments.length) return x1;
|
||||
x0 = x1 = x;
|
||||
return area;
|
||||
};
|
||||
|
||||
area.y0 = function(v) {
|
||||
if (!arguments.length) return y0;
|
||||
y0 = v;
|
||||
area.x0 = function(x) {
|
||||
if (!arguments.length) return x0;
|
||||
x0 = x;
|
||||
return area;
|
||||
};
|
||||
|
||||
area.y1 = function(v) {
|
||||
area.x1 = function(x) {
|
||||
if (!arguments.length) return x1;
|
||||
x1 = x;
|
||||
return area;
|
||||
};
|
||||
|
||||
area.y = function(y) {
|
||||
if (!arguments.length) return y1;
|
||||
y1 = v;
|
||||
y0 = y1 = y;
|
||||
return area;
|
||||
};
|
||||
|
||||
area.interpolate = function(v) {
|
||||
area.y0 = function(y) {
|
||||
if (!arguments.length) return y0;
|
||||
y0 = y;
|
||||
return area;
|
||||
};
|
||||
|
||||
area.y1 = function(y) {
|
||||
if (!arguments.length) return y1;
|
||||
y1 = y;
|
||||
return area;
|
||||
};
|
||||
|
||||
area.interpolate = function(x) {
|
||||
if (!arguments.length) return interpolate;
|
||||
interpolator = d3_svg_lineInterpolators[interpolate = v];
|
||||
interpolator = d3_svg_lineInterpolators[interpolate = x];
|
||||
return area;
|
||||
};
|
||||
|
||||
area.tension = function(v) {
|
||||
area.tension = function(x) {
|
||||
if (!arguments.length) return tension;
|
||||
tension = v;
|
||||
tension = x;
|
||||
return area;
|
||||
};
|
||||
|
||||
|
@ -3164,7 +3181,13 @@ d3.svg.area = function() {
|
|||
|
||||
function d3_svg_areaX(points) {
|
||||
return function(d, i) {
|
||||
return d3_svg_lineX.call(this, points[i], i);
|
||||
return points[i][0];
|
||||
};
|
||||
}
|
||||
|
||||
function d3_svg_areaY(points) {
|
||||
return function(d, i) {
|
||||
return points[i][1];
|
||||
};
|
||||
}
|
||||
d3.svg.chord = function() {
|
||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -1,49 +1,66 @@
|
|||
d3.svg.area = function() {
|
||||
var x = d3_svg_lineX,
|
||||
var x0 = d3_svg_lineX,
|
||||
x1 = d3_svg_lineX,
|
||||
y0 = 0,
|
||||
y1 = d3_svg_lineY,
|
||||
interpolate = "linear",
|
||||
interpolator = d3_svg_lineInterpolators[interpolate],
|
||||
tension = .7;
|
||||
|
||||
// TODO horizontal / vertical / radial orientation
|
||||
|
||||
function area(d) {
|
||||
if (d.length < 1) return null;
|
||||
var points1 = d3_svg_linePoints(this, d, x, y1),
|
||||
points0 = d3_svg_linePoints(this, d, d3_svg_areaX(points1), y0).reverse();
|
||||
var points0 = d3_svg_linePoints(this, d, x0, y0),
|
||||
points1 = d3_svg_linePoints(this, d, x0 === x1 ? d3_svg_areaX(points0) : x1, y0 === y1 ? d3_svg_areaY(points0) : y1);
|
||||
return "M" + interpolator(points1, tension)
|
||||
+ "L" + interpolator(points0, tension)
|
||||
+ "L" + interpolator(points0.reverse(), tension)
|
||||
+ "Z";
|
||||
}
|
||||
|
||||
area.x = function(v) {
|
||||
if (!arguments.length) return x;
|
||||
x = v;
|
||||
area.x = function(x) {
|
||||
if (!arguments.length) return x1;
|
||||
x0 = x1 = x;
|
||||
return area;
|
||||
};
|
||||
|
||||
area.y0 = function(v) {
|
||||
if (!arguments.length) return y0;
|
||||
y0 = v;
|
||||
area.x0 = function(x) {
|
||||
if (!arguments.length) return x0;
|
||||
x0 = x;
|
||||
return area;
|
||||
};
|
||||
|
||||
area.y1 = function(v) {
|
||||
area.x1 = function(x) {
|
||||
if (!arguments.length) return x1;
|
||||
x1 = x;
|
||||
return area;
|
||||
};
|
||||
|
||||
area.y = function(y) {
|
||||
if (!arguments.length) return y1;
|
||||
y1 = v;
|
||||
y0 = y1 = y;
|
||||
return area;
|
||||
};
|
||||
|
||||
area.interpolate = function(v) {
|
||||
area.y0 = function(y) {
|
||||
if (!arguments.length) return y0;
|
||||
y0 = y;
|
||||
return area;
|
||||
};
|
||||
|
||||
area.y1 = function(y) {
|
||||
if (!arguments.length) return y1;
|
||||
y1 = y;
|
||||
return area;
|
||||
};
|
||||
|
||||
area.interpolate = function(x) {
|
||||
if (!arguments.length) return interpolate;
|
||||
interpolator = d3_svg_lineInterpolators[interpolate = v];
|
||||
interpolator = d3_svg_lineInterpolators[interpolate = x];
|
||||
return area;
|
||||
};
|
||||
|
||||
area.tension = function(v) {
|
||||
area.tension = function(x) {
|
||||
if (!arguments.length) return tension;
|
||||
tension = v;
|
||||
tension = x;
|
||||
return area;
|
||||
};
|
||||
|
||||
|
@ -52,6 +69,12 @@ d3.svg.area = function() {
|
|||
|
||||
function d3_svg_areaX(points) {
|
||||
return function(d, i) {
|
||||
return d3_svg_lineX.call(this, points[i], i);
|
||||
return points[i][0];
|
||||
};
|
||||
}
|
||||
|
||||
function d3_svg_areaY(points) {
|
||||
return function(d, i) {
|
||||
return points[i][1];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
require("./../lib/env-js/envjs/node");
|
||||
require("./../lib/sizzle/sizzle");
|
||||
require("./../d3");
|
||||
|
||||
var area = d3.svg.area();
|
||||
|
@ -20,6 +19,16 @@ console.log(" [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
|
|||
console.log(" [[0, 0], [1, 1], [2, 0]]:", area([[0, 0], [1, 1], [2, 0]]));
|
||||
console.log("");
|
||||
|
||||
var i = 0,
|
||||
area = d3.svg.area()
|
||||
.y(function() { return i++; });
|
||||
|
||||
console.log("y(function() { return i++; }):");
|
||||
console.log(" [[0, 0]]:", area([[0, 0]]));
|
||||
console.log(" [[0, 0], [1, 1]]:", area([[0, 0], [1, 1]]));
|
||||
console.log(" [[0, 0], [1, 1], [0, 2]]:", area([[0, 0], [1, 1], [0, 2]]));
|
||||
console.log("");
|
||||
|
||||
var area = d3.svg.area()
|
||||
.y0(-1);
|
||||
|
||||
|
|
|
@ -8,6 +8,11 @@ x(function() { return i++; }):
|
|||
[[0, 0], [1, 1]]: M1,0L2,1L2,0L1,0Z
|
||||
[[0, 0], [1, 1], [2, 0]]: M3,0L4,1L5,0L5,0L4,0L3,0Z
|
||||
|
||||
y(function() { return i++; }):
|
||||
[[0, 0]]: M0,0L0,0Z
|
||||
[[0, 0], [1, 1]]: M0,1L1,2L1,2L0,1Z
|
||||
[[0, 0], [1, 1], [0, 2]]: M0,3L1,4L0,5L0,5L1,4L0,3Z
|
||||
|
||||
y0(-1):
|
||||
[[0, 0]]: M0,0L0,-1Z
|
||||
[[0, 0], [1, 1]]: M0,0L1,1L1,-1L0,-1Z
|
||||
|
|
Загрузка…
Ссылка в новой задаче