| Bio-Graphics documentation | Contained in the Bio-Graphics distribution. |
Bio::Graphics::Glyph::primers - The "STS primers" glyph
See L<Bio::Graphics::Panel> and L<Bio::Graphics::Glyph>.
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.
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.
Please report them.
Bio::Graphics::Panel, Bio::Graphics::Glyph, Bio::Graphics::Glyph::arrow, Bio::Graphics::Glyph::cds, Bio::Graphics::Glyph::crossbox, Bio::Graphics::Glyph::diamond, Bio::Graphics::Glyph::dna, Bio::Graphics::Glyph::dot, Bio::Graphics::Glyph::ellipse, Bio::Graphics::Glyph::extending_arrow, Bio::Graphics::Glyph::generic, Bio::Graphics::Glyph::graded_segments, Bio::Graphics::Glyph::heterogeneous_segments, Bio::Graphics::Glyph::line, Bio::Graphics::Glyph::pinsertion, Bio::Graphics::Glyph::primers, Bio::Graphics::Glyph::rndrect, Bio::Graphics::Glyph::segments, Bio::Graphics::Glyph::ruler_arrow, Bio::Graphics::Glyph::toomany, Bio::Graphics::Glyph::transcript, Bio::Graphics::Glyph::transcript2, Bio::Graphics::Glyph::translation, Bio::Graphics::Glyph::triangle, Bio::DB::GFF, Bio::SeqI, Bio::SeqFeatureI, Bio::Das, GD
Allen Day <day@cshl.org>.
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.
| Bio-Graphics documentation | Contained in the Bio-Graphics distribution. |
package Bio::Graphics::Glyph::primers; #$Id: primers.pm,v 1.1 2008-12-08 23:18:43 lstein Exp $ # package to use for drawing something that looks like # primer pairs. use strict; use base qw(Bio::Graphics::Glyph::generic); use constant HEIGHT => 8; # override draw method sub draw_component { my $self = shift; my $gd = shift; my ($x1,$y1,$x2,$y2) = $self->calculate_boundaries(@_); my $height = $self->option('height') || $self->option('size') || HEIGHT; 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->setThickness(2) if $height > 6; $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); $gd->setThickness(1); } unless ($trunc_right) { $gd->setThickness(2) if $height > 6; $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); $gd->setThickness(1); } # 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__