4 CXGN::Cview::Marker::RangeMarker - a class to draw markers that represent ranges
8 CXGN::Cview::Marker::RangeMarker inherits from L<CXGN::Cview::Marker>.
10 my $m = CXGN::Cview::Marker::RangeMarker->new();
12 $m->set_north_range(10);
13 $m->set_south_range(10);
15 This will render the marker
30 Lukas Mueller (lam87@cornell.edu)
34 This class implements the following functions:
39 use CXGN
::Cview
::Marker
;
40 use CXGN
::Cview
::Label
::RangeLabel
;
42 package CXGN
::Cview
::Marker
::RangeMarker
;
44 use base qw
/ CXGN::Cview::Marker /;
58 my $self = $class -> SUPER
::new
(@_);
60 my $range_label = CXGN
::Cview
::Label
::RangeLabel
->new();
61 $range_label->set_horizontal_offset($self->get_label()->get_horizontal_offset());
62 $range_label->set_vertical_offset($self->get_label()->get_vertical_offset());
63 $range_label->set_name($self->get_label()->get_name());
64 $range_label->set_reference_point($self->get_label()->get_reference_point());
65 $range_label->set_enclosing_rect($self->get_label()->get_enclosing_rect());
66 $self->set_label($range_label);
68 $self->get_label()->set_stacking_level(1);
69 $self->set_label_side("right");
70 $self->set_hilite_chr_region(0);
71 $self->set_region_hilite_color(100, 100, 150);
75 =head2 functions get_north_range(), set_north_range()
77 Synopsis: $m->get_north_range()
78 Arguments: setter: the north range of the range marker
79 in the units of the map
80 Returns: getter: the north range
81 Side effects: the markers range drawn on the northern side
89 return $self->{north_range
};
96 $self->{north_range
}=$cM;
100 =head2 functions get_south_range(), set_south_range()
102 Synopsis: see north range
110 sub get_south_range
{
113 return $self->{south_range
};
116 sub set_south_range
{
119 $self->{south_range
}=$cM;
128 # calculate the pos in pixels of the northern range limit
130 my $north_pixels = $self->get_chromosome()->mapunits2pixels($self->get_offset()) + $self->get_chromosome()->get_vertical_offset() - $self->get_chromosome()->mapunits2pixels($self->get_north_range());
132 # determine the pixels of the southern limit
134 my $south_pixels = $self->get_chromosome()->mapunits2pixels($self->get_offset()) + $self->get_chromosome()->get_vertical_offset() + $self->get_chromosome()->mapunits2pixels($self->get_south_range());
135 # print STDERR "cM = ".$self->get_north_range().", pixels= $north_pixels\n";
136 # print STDERR "cM = ".$self->get_south_range().", pixels= $south_pixels\n";
138 $self->get_label()->set_north_position($north_pixels);
139 $self->get_label()->set_south_position($south_pixels);
140 my $halfwidth = int($self->get_chromosome()->get_width()/2);
141 if ($self->get_label_side() eq "right") {
142 $self->get_label()->set_reference_point($self->get_chromosome()->get_horizontal_offset()+$halfwidth+$self->get_label()->get_stacking_height()*($self->get_label()->get_stacking_level()), int(($north_pixels+$south_pixels)/2));
144 elsif ($self->get_label_side() eq "left") {
145 $self->get_label()->set_reference_point($self->get_chromosome()->get_horizontal_offset()-$halfwidth-$self->get_label()->get_stacking_height()*$self->get_label()->get_stacking_level(), int(($north_pixels+$south_pixels)/2));
148 die "[RangeMarker.pm] label_side can either be right or left. Sorry.";
150 if ($self->get_hilite_chr_region()) {
151 $self->hilite_chr_region($image);
154 $self->get_offset_label()->set_label_text($self->get_offset());
155 # draw the offset on the right if label_side eq left, if display_marker
156 # # offset is true in the chromosome object
158 # if ($self->get_chromosome()->{display_marker_offset}) {
160 # # define the label's reference point
162 # my $offset_label = $self->get_offset_label();
163 # $offset_label->set_reference_point($self->get_chromosome()->get_horizontal_offset()+$halfwidth, int(($north_pixels+$south_pixels)/2));
164 # $offset_label->set_horizontal_offset($self->get_chromosome()->get_horizontal_offset()+ $self->get_label()->get_label_spacer() );
165 # $offset_label->set_vertical_offset($self->get_label()->get_vertical_offset());
166 # $offset_label->set_align_side("left");
168 # $offset_label->set_hidden($self->get_label()->is_hidden());
169 # $offset_label->render($image);
173 $self->SUPER::render
($image);
177 =head2 accessors set_region_hilite_color, get_region_hilite_color
188 sub get_region_hilite_color
{
190 return @
{$self->{region_hilite_color
}};
193 sub set_region_hilite_color
{
195 @
{$self->{region_hilite_color
}}= (shift, shift, shift);
200 =head2 accessors set_hilite_chr_region(), get_hilite_chr_region()
211 sub get_hilite_chr_region
{
213 return $self->{hilite_chr_region
};
216 sub set_hilite_chr_region
{
218 $self->{hilite_chr_region
}=shift;
223 sub hilite_chr_region
{
227 my $north_pixels = $self->get_label()->get_north_position();
228 my $south_pixels = $self->get_label()->get_south_position();
230 # hilite only regions that are visible
232 if ($north_pixels < 0) { $north_pixels = 0; }
233 my $chr_end_pixels = ($self->get_chromosome()->get_height()+$self->get_chromosome()->get_vertical_offset());
234 if ($north_pixels > $chr_end_pixels) {
235 $north_pixels = $chr_end_pixels;
238 my $left_pixels = $self->get_chromosome()->get_horizontal_offset()-$self->get_chromosome()->get_width()/2+1;
239 my $right_pixels = $self->get_chromosome()->get_horizontal_offset()+$self->get_chromosome()->get_width()/2-1;
241 #print STDERR "North: $north_pixels South: $south_pixels. left: $left_pixels. Right: $right_pixels\n";
243 $image->filledRectangle($left_pixels, $north_pixels, $right_pixels, $south_pixels, $image->colorAllocate($self->get_region_hilite_color()));
249 my $color = $image -> colorResolve
($self->get_color());
250 my $halfwidth = int($self->get_chromosome->get_width/2);
251 my $north_y = $self->get_chromosome()->get_vertical_offset() + $self->get_chromosome()->mapunits2pixels($self->get_offset()-$self->get_north_range());
253 my $south_y = $self->get_chromosome()->get_vertical_offset() + $self->get_chromosome()->mapunits2pixels($self->get_offset()+$self->get_south_range());
255 if ($self->get_show_tick()) {
256 $image -> line
($self->get_chromosome()->get_horizontal_offset() - $halfwidth +1, $north_y, $self->get_chromosome()->get_horizontal_offset()+$halfwidth-1, $north_y, $color);
257 $image -> line
($self->get_chromosome()->get_horizontal_offset() - $halfwidth +1, $south_y, $self->get_chromosome()->get_horizontal_offset()+$halfwidth-1, $south_y, $color);