private int distanceToLeaf(Node n) { if (graph.getSuccessors(n).isEmpty()) return 0; int result = 0; for (Object x : graph.getSuccessors(n)) { int tmp = distanceToLeaf((Node) x); if (tmp > result) result = tmp; } return 1 + result; }
public Point2D getAnchorPosition(DerivationViewer.AnchorType type) { switch (type) { case ANCHOR_ROOT: return transform(root); case ANCHOR_LEFTMOST_LEAF: Node n = root; while (graph.getSuccessorCount(n) != 0) n = (Node) graph.getSuccessors(n).toArray()[0]; return transform(n); default: return new Point2D.Double(0, 0); } }
public DerivationTreeTransformer(DerivationTree t, Dimension d, boolean isAnchored) { this.isAnchored = isAnchored; anchorPoint = new Point2D.Double(0, 0); graph = t; DelegateForest<Node, DerivationTreeEdge> del = new DelegateForest<Node, DerivationTreeEdge>(t); del.setRoot(t.getRoot()); del.setRoot(t.getSourceRoot()); root = t.getRoot(); sourceRoot = t.getSourceRoot(); Y_DIST = d.getHeight() / (2 * (1 + distanceToLeaf(root))); int leafCount = 0; for (Node n : t.getVertices()) { if (t.outDegree(n) == 0) leafCount++; } X_DIST = d.getWidth() / leafCount; treeLayout = new TreeLayout<Node, DerivationTreeEdge>(del, (int) Math.round(X_DIST)); }