Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/Graphics/Glyph/triangle.pm @ 0:1f6dce3d34e0
Uploaded
author | mahtabm |
---|---|
date | Thu, 11 Apr 2013 02:01:53 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/variant_effect_predictor/Bio/Graphics/Glyph/triangle.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,143 @@ +package Bio::Graphics::Glyph::triangle; +# DAS-compatible package to use for drawing a triangle + +use strict; +use vars '@ISA'; +@ISA = 'Bio::Graphics::Glyph::generic'; +use Bio::Graphics::Glyph::generic; + +sub pad_left { + my $self = shift; + my $left = $self->SUPER::pad_left; + return $left unless $self->option('point'); + my $extra = $self->option('height')/3; + return $extra > $left ? $extra : $left; +} + +sub pad_right { + my $self = shift; + my $right = $self->SUPER::pad_right; + return $right unless $self->option('point'); + my $extra = $self->option('height')/3; + return $extra > $right ? $extra : $right; +} + +sub draw_component { + my $self = shift; + my $gd = shift; + my $fg = $self->fgcolor; + my $orient = $self->option('orient') || 'S'; + + # find the center and vertices + my ($x1,$y1,$x2,$y2) = $self->calculate_boundaries(@_); + my $xmid = ($x1+$x2)/2; + my $ymid = ($y1+$y2)/2; + + my ($vx1,$vy1,$vx2,$vy2,$vx3,$vy3); + + #make an equilateral + my ($p,$q) = ($self->option('height'),($x2-$x1)/2); + if ($self->option('point')){ + $q = $p/sqrt(3); #2; + $x1 = $xmid - $q; $x2 = $xmid + $q; + $y1 = $ymid - $q; $y2 = $ymid + $q; + } + + if ($orient eq 'S'){$vx1=$x1;$vy1=$y1;$vx2=$x2;$vy2=$y1;$vx3=$xmid;$vy3=$y2;} + elsif($orient eq 'N'){$vx1=$x1;$vy1=$y2;$vx2=$x2;$vy2=$y2;$vx3=$xmid;$vy3=$y1;} + elsif($orient eq 'W'){$vx1=$x2;$vy1=$y1;$vx2=$x2;$vy2=$y2;$vx3=$x2-$p;$vy3=$ymid;} + elsif($orient eq 'E'){$vx1=$x1;$vy1=$y1;$vx2=$x1;$vy2=$y2;$vx3=$x1+$p;$vy3=$ymid;} + + # now draw the triangle + $gd->line($vx1,$vy1,$vx2,$vy2,$fg); + $gd->line($vx2,$vy2,$vx3,$vy3,$fg); + $gd->line($vx3,$vy3,$vx1,$vy1,$fg); + + if (my $c = $self->bgcolor){ + $gd->fillToBorder($xmid,$ymid,$fg,$c) if $orient eq 'S' || $orient eq 'N'; + $gd->fillToBorder($x1+1,$ymid,$fg,$c) if $orient eq 'E'; + $gd->fillToBorder($x2-1,$ymid,$fg,$c) if $orient eq 'W'; + } +} + +1; + +__END__ + +=head1 NAME + +Bio::Graphics::Glyph::triangle - The "triangle" glyph + +=head1 SYNOPSIS + + See L<Bio::Graphics::Panel> and L<Bio::Graphics::Glyph>. + +=head1 DESCRIPTION + +This glyph draws an equilateral triangle when -point is defined. +It draws an isoceles triangle otherwise. It is possible to draw +the triangle with the base on the N, S, E, or W side. + +=head2 OPTIONS + +In addition to the common options, the following glyph-specific +options are recognized: + + Option Description Default + ------ ----------- ------- + + -point If true, the triangle 0 + will drawn at the center + of the range, and not scaled + to the feature width. + + -orient On which side shall the S + base be? (NSEW) + +=head1 BUGS + +Please report them. + +=head1 SEE ALSO + +L<Bio::Graphics::Panel>, +L<Bio::Graphics::Glyph>, +L<Bio::Graphics::Glyph::arrow>, +L<Bio::Graphics::Glyph::cds>, +L<Bio::Graphics::Glyph::crossbox>, +L<Bio::Graphics::Glyph::diamond>, +L<Bio::Graphics::Glyph::dna>, +L<Bio::Graphics::Glyph::dot>, +L<Bio::Graphics::Glyph::ellipse>, +L<Bio::Graphics::Glyph::extending_arrow>, +L<Bio::Graphics::Glyph::generic>, +L<Bio::Graphics::Glyph::graded_segments>, +L<Bio::Graphics::Glyph::heterogeneous_segments>, +L<Bio::Graphics::Glyph::line>, +L<Bio::Graphics::Glyph::pinsertion>, +L<Bio::Graphics::Glyph::primers>, +L<Bio::Graphics::Glyph::rndrect>, +L<Bio::Graphics::Glyph::segments>, +L<Bio::Graphics::Glyph::ruler_arrow>, +L<Bio::Graphics::Glyph::toomany>, +L<Bio::Graphics::Glyph::transcript>, +L<Bio::Graphics::Glyph::transcript2>, +L<Bio::Graphics::Glyph::translation>, +L<Bio::Graphics::Glyph::triangle>, +L<Bio::DB::GFF>, +L<Bio::SeqI>, +L<Bio::SeqFeatureI>, +L<Bio::Das>, +L<GD> + +=head1 AUTHOR + +Allen Day E<lt>day@cshl.orgE<gt>. + +Copyright (c) 2001 Cold Spring Harbor Laboratory + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. See DISCLAIMER.txt for +disclaimers of warranty. + +=cut