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 )