Bio::Graphics::Glyph triangle
 Summary Included libraries Package variables Synopsis Description General documentation Methods
Toolbar
 WebCvs Raw content
Summary
Bio::Graphics::Glyph::triangle - The "triangle" glyph
Package variables
No package variables defined.
Included modules
Inherit
Synopsis
See Bio::Graphics::Panel and Bio::Graphics::Glyph.
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. 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)
Methods
 draw_component No description Code pad_left No description Code pad_right No description Code
Methods description
None available.
Methods code
 draw_component description prev next Top
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__
}
my \$self = shift;
return \$left unless \$self->option('point');
my \$extra = \$self->option('height')/3;
return \$extra > \$left ? \$extra : \$left;
}
my \$self = shift;
return \$right unless \$self->option('point');
my \$extra = \$self->option('height')/3;
return \$extra > \$right ? \$extra : \$right;
}
General documentation
 BUGS Top