| Bio-Graphics documentation | Contained in the Bio-Graphics distribution. |
Bio::Graphics::Glyph::diamond - The "diamond" glyph
See L<Bio::Graphics::Panel> and L<Bio::Graphics::Glyph>.
This glyph draws a diamond of fixed size, positioned in the center of the feature. The height and width of the diamond are set by the "height" option.
The following options are standard among all Glyphs. See Bio::Graphics::Glyph for a full explanation.
Option Description Default
------ ----------- -------
-fgcolor Foreground color black
-outlinecolor Synonym for -fgcolor
-bgcolor Background color turquoise
-fillcolor Synonym for -bgcolor
-linewidth Line width 1
-height Height of glyph 10
-font Glyph font gdSmallFont
-connector Connector type 0 (false)
-connector_color
Connector color black
-label Whether to draw a label 0 (false)
-description Whether to draw a description 0 (false)
-hilite Highlight color undef (no color)
The following glyph-specific options are also recognized:
Option Description Default
------ ----------- -------
-point Do not increase wideness of glyph 0 (false)
even if size of feature is >1
-fallback_to_rectangle 0 (false)
If the feature's length is > 1,
then draw the feature as a
rectangle, not a diamond.
If the feature is wider than a point, then the label and description are placed where the feature's boundary is, and not where the diamond is drawn.
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
Lincoln Stein <lstein@cshl.org>, Todd Harris <harris@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::diamond; # DAS-compatible package to use for drawing a colored diamond use strict; use base qw(Bio::Graphics::Glyph::generic); sub my_description { return <<END; This glyph draws a diamond of fixed size, positioned in the center of the feature. The height and width of the diamond are set by the "height" option. END } sub my_options { { point => [ 'boolean', undef, 'Draw the glyph at a fixed point at the center of the feature.'], fallback_to_rectangle => [ 'boolean', undef, 'Draw a diamond if the feature is 1 base long.', 'Draw a standard box if the feature is >1 base long.'], } } sub draw_component { my $self = shift; my $gd = shift; my $fg = $self->fgcolor; # find the center and vertices my ($x1,$y1,$x2,$y2) = $self->calculate_boundaries(@_); my $xmid = ($x1+$x2)/2; my $ymid = ($y1+$y2)/2; my $h = $self->option('height')/2; $y1 = $ymid - $h; $y2 = $ymid + $h; # if it's a point-like feature, then draw symmetrically # around the midpoint if ($self->option('point') || $x2 - $x1 < $h*2) { $x1 = $xmid - $h; $x2 = $xmid + $h; } elsif ($self->option('fallback_to_rectangle')) { return $self->SUPER::draw_component($gd,@_); } my $poly_pkg = $self->polygon_package; my $polygon = $poly_pkg->new(); $polygon->addPt($x1,$ymid); $polygon->addPt($xmid,$y1); $polygon->addPt($x2,$ymid); $polygon->addPt($xmid,$y2); # Have to draw TWO polygons for fills in order to get an outline # because filledPolygon in GD croaks with extra parameters (and # doesn't support drawing of stroke anyways). if (my $c = $self->bgcolor) { $gd->filledPolygon($polygon,$c); $gd->polygon($polygon,$fg); } else { $gd->polygon($polygon,$fg); } } 1; __END__