Mercurial > repos > mahtabm > ensembl
diff variant_effect_predictor/Bio/Graphics/Glyph/primers.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/primers.pm Thu Apr 11 02:01:53 2013 -0400 @@ -0,0 +1,151 @@ +package Bio::Graphics::Glyph::primers; +# package to use for drawing something that looks like +# primer pairs. + +use strict; +use vars '@ISA'; +@ISA = 'Bio::Graphics::Glyph::generic'; +use Bio::Graphics::Glyph::generic; + +use constant HEIGHT => 4; + +# we do not need the default amount of room +#sub calculate_height { +# my $self = shift; +# return $self->option('label') ? HEIGHT + $self->labelheight + 2 : HEIGHT; +#} + +# override draw method +sub draw { + my $self = shift; + my $gd = shift; + my ($x1,$y1,$x2,$y2) = $self->calculate_boundaries(@_); + + my $fg = $self->fgcolor; + my $a2 = HEIGHT/2; + my $center = $y1 + $a2; + + # just draw us as a solid line -- very simple + if ($x2-$x1 < HEIGHT*2) { + $gd->line($x1,$center,$x2,$center,$fg); + return; + } + + # otherwise draw two pairs of arrows + # --> <-- + my $trunc_left = $x1 < $self->panel->left; + my $trunc_right = $x2 > $self->panel->right; + + unless ($trunc_left) { + $gd->line($x1,$center,$x1 + HEIGHT,$center,$fg); + $gd->line($x1 + HEIGHT,$center,$x1 + HEIGHT - $a2,$center-$a2,$fg); + $gd->line($x1 + HEIGHT,$center,$x1 + HEIGHT - $a2,$center+$a2,$fg); + } + + unless ($trunc_right) { + $gd->line($x2,$center,$x2 - HEIGHT,$center,$fg); + $gd->line($x2 - HEIGHT,$center,$x2 - HEIGHT + $a2,$center+$a2,$fg); + $gd->line($x2 - HEIGHT,$center,$x2 - HEIGHT + $a2,$center-$a2,$fg); + } + + # connect the dots if requested + if ($self->connect) { + my $c = $self->color('connect_color') || $self->bgcolor; + $gd->line($x1 + ($trunc_left ? 0 : HEIGHT + 2),$center, + $x2 - ($trunc_right ? 0 : HEIGHT + 2),$center, + $c); + } + + # add a label if requested + $self->draw_label($gd,@_) if $self->option('label'); + $self->draw_description($gd,@_) if $self->option('description'); + +} + +sub connect { + my $self = shift; + return $self->option('connect') if defined $self->option('connect'); + 1; # default +} + +1; + +__END__ + +=head1 NAME + +Bio::Graphics::Glyph::primers - The "STS primers" glyph + +=head1 SYNOPSIS + + See L<Bio::Graphics::Panel> and L<Bio::Graphics::Glyph>. + +=head1 DESCRIPTION + +This glyph draws two arrows oriented towards each other and connected +by a line of a contrasting color. The length of the arrows is +immaterial, but the length of the glyph itself corresponds to the +length of the scaled feature. + +=head2 OPTIONS + +In addition to the common options, the following glyph-specific +options are recognized: + + Option Description Default + ------ ----------- ------- + + -connect Whether to connect the true + two arrowheads by a line. + + -connect_color The color to use for the bgcolor + connecting line. + +=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