diff options
Diffstat (limited to 'Master/texmf/asymptote/drawtree.asy')
-rw-r--r-- | Master/texmf/asymptote/drawtree.asy | 101 |
1 files changed, 0 insertions, 101 deletions
diff --git a/Master/texmf/asymptote/drawtree.asy b/Master/texmf/asymptote/drawtree.asy deleted file mode 100644 index 832dfc658a1..00000000000 --- a/Master/texmf/asymptote/drawtree.asy +++ /dev/null @@ -1,101 +0,0 @@ -// A simple tree drawing module contributed by adarovsky -// See example treetest.asy - -real treeNodeStep = 0.5cm; -real treeLevelStep = 1cm; -real treeMinNodeWidth = 2cm; - -struct TreeNode { - TreeNode parent; - TreeNode[] children; - - frame content; - - pair pos; - real adjust; -} - -void add( TreeNode child, TreeNode parent ) -{ - child.parent = parent; - parent.children.push( child ); -} - -TreeNode makeNode( TreeNode parent = null, frame f ) -{ - TreeNode child = new TreeNode; - child.content = f; - if( parent != null ) { - add( child, parent ); - } - return child; -} - -TreeNode makeNode( TreeNode parent = null, Label label ) -{ - frame f; - box( f, label); - return makeNode( parent, f ); -} - - -real layout( int level, TreeNode node ) -{ - if( node.children.length > 0 ) { - real width[] = new real[node.children.length]; - real curWidth = 0; - - for( int i = 0; i < node.children.length; ++i ) { - width[i] = layout( level+1, node.children[i] ); - - node.children[i].pos = (curWidth + width[i]/2, - -level*treeLevelStep); - curWidth += width[i] + treeNodeStep; - } - - real midPoint = ( sum( width )+treeNodeStep*(width.length-1)) / 2; - for( int i = 0; i < node.children.length; ++i ) { - node.children[i].adjust = - midPoint; - } - - return max( (max(node.content)-min(node.content)).x, - sum(width)+treeNodeStep*(width.length-1) ); - } - else { - return max( treeMinNodeWidth, (max(node.content)-min(node.content)).x ); - } -} - -void drawAll( TreeNode node, frame f ) -{ - pair pos; - if( node.parent != null ) - pos = (node.parent.pos.x+node.adjust, 0); - else - pos = (node.adjust, 0); - node.pos += pos; - - node.content = shift(node.pos)*node.content; - add( f, node.content ); - - - if( node.parent != null ) { - path p = point(node.content, N)--point(node.parent.content,S); - draw( f, p, currentpen ); - } - - for( int i = 0; i < node.children.length; ++i ) - drawAll( node.children[i], f ); -} - -void draw( TreeNode root, pair pos ) -{ - frame f; - - root.pos = (0,0); - layout( 1, root ); - - drawAll( root, f ); - - add(f,pos); -} |