You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.2 KiB
53 lines
1.2 KiB
5 years ago
|
import roundNode from "./treemap/round";
|
||
|
import treemapDice from "./treemap/dice";
|
||
|
|
||
|
export default function() {
|
||
|
var dx = 1,
|
||
|
dy = 1,
|
||
|
padding = 0,
|
||
|
round = false;
|
||
|
|
||
|
function partition(root) {
|
||
|
var n = root.height + 1;
|
||
|
root.x0 =
|
||
|
root.y0 = padding;
|
||
|
root.x1 = dx;
|
||
|
root.y1 = dy / n;
|
||
|
root.eachBefore(positionNode(dy, n));
|
||
|
if (round) root.eachBefore(roundNode);
|
||
|
return root;
|
||
|
}
|
||
|
|
||
|
function positionNode(dy, n) {
|
||
|
return function(node) {
|
||
|
if (node.children) {
|
||
|
treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);
|
||
|
}
|
||
|
var x0 = node.x0,
|
||
|
y0 = node.y0,
|
||
|
x1 = node.x1 - padding,
|
||
|
y1 = node.y1 - padding;
|
||
|
if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
|
||
|
if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
|
||
|
node.x0 = x0;
|
||
|
node.y0 = y0;
|
||
|
node.x1 = x1;
|
||
|
node.y1 = y1;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
partition.round = function(x) {
|
||
|
return arguments.length ? (round = !!x, partition) : round;
|
||
|
};
|
||
|
|
||
|
partition.size = function(x) {
|
||
|
return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];
|
||
|
};
|
||
|
|
||
|
partition.padding = function(x) {
|
||
|
return arguments.length ? (padding = +x, partition) : padding;
|
||
|
};
|
||
|
|
||
|
return partition;
|
||
|
}
|