Treemap module

recompute_if_dirty

procedure2 overloadsSource

Adds up the sizes of every parent and orders children from largest to smallest. Call it after adding nodes or changing sizes, before laying out.

recompute_if_dirty :: (treemap: *Treemap)

Parameters

treemap: *Treemap
recompute_if_dirty :: (
    display: *Treemap_Display,
    outer_size: Vector2,
    border_proc: Border_Proc = null,
    force := false
)

Lays the tree out in a rectangle of outer_size, with each node's area proportional to its size, and fills display.nodes. Does nothing if nothing changed since the last layout, unless force. The treemap must be up to date first.

Parameters

display: *Treemap_Display
outer_size: Vector2
border_proc: Border_Proc = null
force := false
Example↗
treemap: Treemap;
root := add_node(*treemap, "root", null);
a := add_node(*treemap, "a", root);
b := add_node(*treemap, "b", root);
a.size = 3;
b.size = 1;
recompute_if_dirty(*treemap);
display := init_treemap_display(*treemap);
recompute_if_dirty(*display, .{100, 100});
rect := display.nodes[get_index(*treemap, a)];
area := rect.size.x * rect.size.y;
assert(area > 7499 && area < 7501);

See also