package Bio::Graphics::Glyph::dot; # DAS-compatible package to use for drawing a ring or filled circle use strict; use base qw(Bio::Graphics::Glyph::point_glyph); use constant PI => 3.14159; sub my_description { return < [ 'boolean', undef, 'If true, draws a fixed-radius ellipse at the center of the feature,', 'regardless of the feature\'s length.'], } } sub draw { my $self = shift; my $gd = shift; my $fg = $self->fgcolor; # now draw a circle my ($left,$top) = @_; my ($x1,$y1,$x2,$y2) = $self->calculate_boundaries(@_); my $xmid = (($x1+$x2)/2); my $width = abs($x2-$x1); my $ymid = (($y1+$y2)/2); my $height = abs($y2-$y1); # only point ovals allowed now my $r = $self->height; # Code to maintain compliancy with gd 1.8.4 # gd 1.8.4 does not support the ellipse() or filledEllipse() methods. # Let's maintain the filledEllipse approach for installations # using gd2 or for drawing images with GD::SVG # Otherwise, we will use fill as before. # The can() method fails with GD::SVG. Why? my $bg = $self->bgcolor; if ($gd->can('filledEllipse') || $gd =~ /SVG/ ) { $gd->filledEllipse($xmid,$ymid,$r,$r,$bg) if ($bg); # Draw the border (or unfilled ellipse) $gd->ellipse($xmid,$ymid,$r,$r,$fg); } else { # Let's draw a circle in the gd 1.8.4 manner $gd->arc($xmid,$ymid,$r,$r,0,360,$fg); $gd->fillToBorder($xmid,$ymid,$fg,$bg) if ($bg); } #how about a fuse for the bomb? #work in degrees, not radians. So we define PI above if(defined $self->option('stem')){ my $angle = $self->option('stem'); $gd->line($xmid+($r/PI*sin($angle*PI/180)), $ymid+($r/PI*cos($angle*PI/180)), $xmid+($r*sin($angle*PI/180)), $ymid+($r*cos($angle*PI/180)),$fg); } $self->draw_label($gd,@_) if $self->option('label'); } 1; __END__ =head1 NAME Bio::Graphics::Glyph::dot - The "dot" glyph =head1 SYNOPSIS See L and L. =head1 DESCRIPTION This glyph draws an ellipse the width of the scaled feature passed, and height a possibly configured height (See Bio::Graphics::Glyph). =head2 OPTIONS The following options are standard among all Glyphs. See L 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) In addition to the common options, the following glyph-specific options are recognized: Option Description Default ------ ----------- ------- -point Whether to draw an ellipse feature width the scaled width of the feature or with radius point. =head1 BUGS Please report them. =head1 SEE ALSO L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L =head1 AUTHOR Allen Day Eday@cshl.orgE. 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