SVG-Graph
view release on metacpan or search on metacpan
Graph/Glyph/tree.pm view on Meta::CPAN
my $c = 1;
foreach my $d ($a{node}->daughters){
my %style = $a{node}->_style ? $a{node}->_style : $self->_style;
my $frac = $d->leaves_under / $a{node}->leaves_under;
$xoffset_old = $xoffset;
#horizontal bar spanning the domain of a child subtree
if(!$d->left_sisters and !$d->right_sisters){
} elsif(!$d->left_sisters){
$a{group}->line(x1=>$xoffset+($frac*$a{xsize}/2),
y1=>$a{yoffset},
x2=>$xoffset+($frac*$a{xsize}),
y2=>$a{yoffset},
style=>{%style});
#warn join ' ', $a{node}->_style;
} elsif(!$d->right_sisters){
$a{group}->line(x1=>$xoffset,
y1=>$a{yoffset},
x2=>$xoffset+($frac*$a{xsize}/2),
y2=>$a{yoffset},
style=>{%style});
} else {
$a{group}->line(x1=>$xoffset,
y1=>$a{yoffset},
x2=>$xoffset+($frac*$a{xsize}),
y2=>$a{yoffset},
style=>{%style});
}
if($d->depth_under <= 1) {
$a{group}->line(x1=>(($frac*$a{xsize}+$xoffset)+($xoffset))/2,x2=>(($frac*$a{xsize}+$xoffset)+($xoffset))/2,
y1=>$a{yoffset},
y2=>$maxy,
style=>{%style}
);
}
else {
#root branch of the child subtree
$a{group}->line(x1=>(($frac*$a{xsize}+$xoffset)+($xoffset))/2,x2=>(($frac*$a{xsize}+$xoffset)+($xoffset))/2,
y1=>$a{yoffset},
y2=>$a{yoffset}+($a{yscale}*$d->branch_length),
style=>{%style}
);
}
#root branch label
my($cx,$cy) = ((($frac*$a{xsize}+$xoffset)+($xoffset))/2 , $maxy);
#my($cx,$cy) = ((($frac*$a{xsize}+$xoffset)+($xoffset))/2 , $a{yoffset}+($a{yscale}*$d->branch_length));
$a{group}->text(x=>$cx,
y=>$cy,
# style=>{'font-size'=>'15px'},
style=>{$self->_style,'stroke-width'=>0.5},
transform=>"rotate(90,$cx,$cy)"
)->cdata($d->branch_label());
#->cdata($d->name);
$xoffset += $frac*$a{xsize};
$c++;
$self->_draw(group=>$a{group},node=>$d,
xsize=>$xoffset - $xoffset_old,
yscale=>$a{yscale},
xoffset => $xoffset_old,
yoffset => $a{yoffset} + ($d->branch_length * $a{yscale}),
maxy => $maxy
);
}
}
1;
( run in 2.308 seconds using v1.01-cache-2.11-cpan-df04353d9ac )