Fix negatively-sized rectangles in treemap.
Includes unit test! Fixes #136.
This commit is contained in:
Родитель
fb7e69f75e
Коммит
04d2d546cf
|
@ -1754,7 +1754,7 @@ d3.layout.treemap = function() {
|
||||||
v = u ? round(row.area / u) : 0,
|
v = u ? round(row.area / u) : 0,
|
||||||
o;
|
o;
|
||||||
if (u == rect.dx) { // horizontal subdivision
|
if (u == rect.dx) { // horizontal subdivision
|
||||||
if (flush || v > rect.dy) v = rect.dy; // over+underflow
|
if (flush || v > rect.dy) v = v ? rect.dy : 0; // over+underflow
|
||||||
while (++i < n) {
|
while (++i < n) {
|
||||||
o = row[i];
|
o = row[i];
|
||||||
o.x = x;
|
o.x = x;
|
||||||
|
@ -1767,7 +1767,7 @@ d3.layout.treemap = function() {
|
||||||
rect.y += v;
|
rect.y += v;
|
||||||
rect.dy -= v;
|
rect.dy -= v;
|
||||||
} else { // vertical subdivision
|
} else { // vertical subdivision
|
||||||
if (flush || v > rect.dx) v = rect.dx; // over+underflow
|
if (flush || v > rect.dx) v = v ? rect.dx : 0; // over+underflow
|
||||||
while (++i < n) {
|
while (++i < n) {
|
||||||
o = row[i];
|
o = row[i];
|
||||||
o.x = x;
|
o.x = x;
|
||||||
|
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -106,7 +106,7 @@ d3.layout.treemap = function() {
|
||||||
v = u ? round(row.area / u) : 0,
|
v = u ? round(row.area / u) : 0,
|
||||||
o;
|
o;
|
||||||
if (u == rect.dx) { // horizontal subdivision
|
if (u == rect.dx) { // horizontal subdivision
|
||||||
if (flush || v > rect.dy) v = rect.dy; // over+underflow
|
if (flush || v > rect.dy) v = v ? rect.dy : 0; // over+underflow
|
||||||
while (++i < n) {
|
while (++i < n) {
|
||||||
o = row[i];
|
o = row[i];
|
||||||
o.x = x;
|
o.x = x;
|
||||||
|
@ -119,7 +119,7 @@ d3.layout.treemap = function() {
|
||||||
rect.y += v;
|
rect.y += v;
|
||||||
rect.dy -= v;
|
rect.dy -= v;
|
||||||
} else { // vertical subdivision
|
} else { // vertical subdivision
|
||||||
if (flush || v > rect.dx) v = rect.dx; // over+underflow
|
if (flush || v > rect.dx) v = v ? rect.dx : 0; // over+underflow
|
||||||
while (++i < n) {
|
while (++i < n) {
|
||||||
o = row[i];
|
o = row[i];
|
||||||
o.x = x;
|
o.x = x;
|
||||||
|
|
|
@ -134,6 +134,36 @@ suite.addBatch({
|
||||||
{x: 1, y: 556, dx: 599, dy: 277},
|
{x: 1, y: 556, dx: 599, dy: 277},
|
||||||
{x: 1, y: 1, dx: 599, dy: 555}
|
{x: 1, y: 1, dx: 599, dy: 555}
|
||||||
]);
|
]);
|
||||||
|
},
|
||||||
|
"no negatively sized rectangles": function(treemap) {
|
||||||
|
var t = treemap().size([615, 500]).sort(function(a, b) { return a.value - b.value; }).padding(29),
|
||||||
|
nodes = t.nodes({"children": [
|
||||||
|
{"value": 1},
|
||||||
|
{"value": 9},
|
||||||
|
{"value": 3},
|
||||||
|
{"value": 15},
|
||||||
|
{"value": 44},
|
||||||
|
{"value": 28},
|
||||||
|
{"value": 32},
|
||||||
|
{"value": 41},
|
||||||
|
{"value": 50},
|
||||||
|
{"value": 60},
|
||||||
|
{"value": 64},
|
||||||
|
{"value": 75},
|
||||||
|
{"value": 76},
|
||||||
|
{"value": 84},
|
||||||
|
{"value": 88},
|
||||||
|
{"value": 100},
|
||||||
|
{"value": 140},
|
||||||
|
{"value": 142},
|
||||||
|
{"value": 363},
|
||||||
|
{"value": 657},
|
||||||
|
{"value": 670},
|
||||||
|
{"value": 822},
|
||||||
|
{"value": 1173},
|
||||||
|
{"value": 1189}
|
||||||
|
]}).map(layout);
|
||||||
|
assert.equal(nodes.filter(function(n) { return n.dx < 0 || n.dy < 0; }).length, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Загрузка…
Ссылка в новой задаче