#========================================================================== # Copyright (c) 1995-1998 Martien Verbruggen #-------------------------------------------------------------------------- # # Name: # GD::Graph::points.pm # # $Id: points.pm,v 1.10 2000/10/07 04:06:22 mgjv Exp $ # #========================================================================== package GD::Graph::points; $GD::Graph::points::VERSION = '$Revision: 1.10 $' =~ /\s([\d.]+)/; use strict; use GD::Graph::axestype; use GD::Graph::utils qw(:all); @GD::Graph::points::ISA = qw( GD::Graph::axestype ); # PRIVATE sub draw_data_set { my $self = shift; my $ds = shift; my @values = $self->{_data}->y_values($ds) or return $self->_set_error("Impossible illegal data set: $ds", $self->{_data}->error); # Pick a colour my $dsci = $self->set_clr($self->pick_data_clr($ds)); my $type = $self->pick_marker($ds); for (my $i = 0; $i < @values; $i++) { next unless defined $values[$i]; my ($xp, $yp); if (defined($self->{x_min_value}) && defined($self->{x_max_value})) { ($xp, $yp) = $self->val_to_pixel( $self->{_data}->get_x($i), $values[$i], $ds); } else { ($xp, $yp) = $self->val_to_pixel($i+1, $values[$i], $ds); } $self->marker($xp, $yp, $type, $dsci ); $self->{_hotspots}->[$ds]->[$i] = ['rect', $self->marker_coordinates($xp, $yp)]; } return $ds; } # Pick a marker type sub pick_marker # number { my $self = shift; my $num = shift; ref $self->{markers} ? $self->{markers}[ $num % (1 + $#{$self->{markers}}) - 1 ] : ($num % 8) || 8; } # Draw a marker sub marker_coordinates { my $self = shift; my ($xp, $yp) = @_; return ( $xp - $self->{marker_size}, $xp + $self->{marker_size}, $yp + $self->{marker_size}, $yp - $self->{marker_size}, ); } sub marker # $xp, $yp, type (1-7), $colourindex { my $self = shift; my ($xp, $yp, $mtype, $mclr) = @_; return unless defined $mclr; my ($l, $r, $b, $t) = $self->marker_coordinates($xp, $yp); MARKER: { ($mtype == 1) && do { # Square, filled $self->{graph}->filledRectangle( $l, $t, $r, $b, $mclr ); last MARKER; }; ($mtype == 2) && do { # Square, open $self->{graph}->rectangle( $l, $t, $r, $b, $mclr ); last MARKER; }; ($mtype == 3) && do { # Cross, horizontal $self->{graph}->line( $l, $yp, $r, $yp, $mclr ); $self->{graph}->line( $xp, $t, $xp, $b, $mclr ); last MARKER; }; ($mtype == 4) && do { # Cross, diagonal $self->{graph}->line( $l, $b, $r, $t, $mclr ); $self->{graph}->line( $l, $t, $r, $b, $mclr ); last MARKER; }; ($mtype == 5) && do { # Diamond, filled $self->{graph}->line( $l, $yp, $xp, $t, $mclr ); $self->{graph}->line( $xp, $t, $r, $yp, $mclr ); $self->{graph}->line( $r, $yp, $xp, $b, $mclr ); $self->{graph}->line( $xp, $b, $l, $yp, $mclr ); $self->{graph}->fillToBorder( $xp, $yp, $mclr, $mclr ); last MARKER; }; ($mtype == 6) && do { # Diamond, open $self->{graph}->line( $l, $yp, $xp, $t, $mclr ); $self->{graph}->line( $xp, $t, $r, $yp, $mclr ); $self->{graph}->line( $r, $yp, $xp, $b, $mclr ); $self->{graph}->line( $xp, $b, $l, $yp, $mclr ); last MARKER; }; ($mtype == 7) && do { # Circle, filled $self->{graph}->arc( $xp, $yp, 2 * $self->{marker_size}, 2 * $self->{marker_size}, 0, 360, $mclr ); $self->{graph}->fillToBorder( $xp, $yp, $mclr, $mclr ); last MARKER; }; ($mtype == 8) && do { # Circle, open $self->{graph}->arc( $xp, $yp, 2 * $self->{marker_size}, 2 * $self->{marker_size}, 0, 360, $mclr ); last MARKER; }; } } sub draw_legend_marker { my $self = shift; my $n = shift; my $x = shift; my $y = shift; my $ci = $self->set_clr($self->pick_data_clr($n)); my $old_ms = $self->{marker_size}; my $ms = _min($self->{legend_marker_height}, $self->{legend_marker_width}); ($self->{marker_size} > $ms/2) and $self->{marker_size} = $ms/2; $x += int($self->{legend_marker_width}/2); $y += int($self->{lg_el_height}/2); $n = $self->pick_marker($n); $self->marker($x, $y, $n, $ci); $self->{marker_size} = $old_ms; } "Just another true value";