Skip to content

teodorov/ploeg_tree_layout

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ploeg Tree Layout

This layout is the Ploeg adaptation of the extended Reingold-Tilford algorithm as described in the paper van der Ploeg, A. (2014), Drawing non-layered tidy trees in linear time, Softw. Pract. Exper., 44, pages 1467– 1484, doi: 10.1002/spe.2213

The original implementation can be found on github at: non-layered-tidy-trees

This code is in the public domain, use it any way you wish. A reference to the paper is appreciated!

Features

Non-layered tidy tree layout of a tree screenshot

Non-layered tidy tree layout of a forest screenshot

This implementation isolates the algorithm from the tree datastructure. The tree is obtained through via

  List<V> Function() roots;
  List<V> Function(V) next;

Usage

    Map<int, List<int>> simpleTree = {
      0: [1, 2],
      1: [3],
      2: [4, 5],
      3: [],
      4: [],
      5: []
    };

    Map<int, Offset> nodePositions = {};
    Map<int, Size> nodeSizes = {};

    var algo = PloegTreeLayout(
        roots: () => [0],
        next: (v) => simpleTree[v]!,
        sizeGetter: (v) {
          Size size =
              Size(Random().nextInt(90) + 30, Random().nextInt(60) + 20);
          nodeSizes[v] = size;
          return size;
        },
        onPositionChange: (v, offset) => {nodePositions[v] = offset});
    algo.layout();

About

A dart implementation of the Ploeg Non-Layered Tidy Tree Layout

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published