points.pm
上传用户:shbosideng
上传日期:2013-05-04
资源大小:1555k
文件大小:4k
源码类别:

SNMP编程

开发平台:

C/C++

  1. #==========================================================================
  2. #    Copyright (c) 1995-1998 Martien Verbruggen
  3. #--------------------------------------------------------------------------
  4. #
  5. # Name:
  6. # GIFgraph::points.pm
  7. #
  8. # $Id: points.pm,v 1.1.1.1 2002/02/26 10:16:37 oetiker Exp $
  9. #
  10. #==========================================================================
  11. package GIFgraph::points;
  12. use strict qw(vars refs subs);
  13.  
  14. use GIFgraph::axestype;
  15. use GIFgraph::utils qw(:all);
  16. @GIFgraph::points::ISA = qw( GIFgraph::axestype );
  17. my %Defaults = (
  18. # The size of the marker to use in the points and linespoints graphs
  19. # in pixels
  20.  
  21. marker_size => 4,
  22. );
  23.  
  24. {
  25. sub initialise()
  26. {
  27. my $s = shift;
  28. $s->SUPER::initialise();
  29. my $key;
  30. foreach $key (keys %Defaults)
  31. {
  32. $s->set( $key => $Defaults{$key} );
  33. }
  34. }
  35. # PRIVATE
  36. sub draw_data_set($$$) # GD::Image, @data
  37. {
  38. my $s = shift;
  39. my $g = shift;
  40. my $d = shift;
  41. my $ds = shift;
  42. # Pick a colour
  43. my $dsci = $s->set_clr( $g, $s->pick_data_clr($ds) );
  44. my $type = $s->pick_marker($ds);
  45. my $i;
  46. for $i (0 .. $s->{numpoints}) 
  47. {
  48. next unless (defined $d->[$i]);
  49. my ($xp, $yp) = $s->val_to_pixel($i+1, $d->[$i], $ds);
  50. $s->marker( $g, $xp, $yp, $type, $dsci );
  51. }
  52. }
  53. # Pick a marker type
  54.  
  55. sub pick_marker($) # number
  56. {
  57. my $s = shift;
  58. my $num = shift;
  59. if ( exists $s->{markers} ) 
  60. {
  61. return $s->{markers}[ $num % (1 + $#{$s->{markers}}) - 1 ];
  62. }
  63. return ($num % 8) || 8;
  64. }
  65.  
  66. # Draw a marker
  67.  
  68. sub marker($$$$$) # $graph, $xp, $yp, type (1-7), $colourindex
  69. {
  70. my $self = shift;
  71. my ($graph, $xp, $yp, $mtype, $mclr) = @_;
  72. my $l = $xp - $self->{marker_size};
  73. my $r = $xp + $self->{marker_size};
  74. my $b = $yp + $self->{marker_size};
  75. my $t = $yp - $self->{marker_size};
  76. MARKER: {
  77. ($mtype == 1) && do 
  78. { # Square, filled
  79. $graph->filledRectangle( $l, $t, $r, $b, $mclr );
  80. last MARKER;
  81. };
  82. ($mtype == 2) && do 
  83. { # Square, open
  84. $graph->rectangle( $l, $t, $r, $b, $mclr );
  85. last MARKER;
  86. };
  87. ($mtype == 3) && do 
  88. { # Cross, horizontal
  89. $graph->line( $l, $yp, $r, $yp, $mclr );
  90. $graph->line( $xp, $t, $xp, $b, $mclr );
  91. last MARKER;
  92. };
  93. ($mtype == 4) && do 
  94. { # Cross, diagonal
  95. $graph->line( $l, $b, $r, $t, $mclr );
  96. $graph->line( $l, $t, $r, $b, $mclr );
  97. last MARKER;
  98. };
  99. ($mtype == 5) && do 
  100. { # Diamond, filled
  101. $graph->line( $l, $yp, $xp, $t, $mclr );
  102. $graph->line( $xp, $t, $r, $yp, $mclr );
  103. $graph->line( $r, $yp, $xp, $b, $mclr );
  104. $graph->line( $xp, $b, $l, $yp, $mclr );
  105. $graph->fillToBorder( $xp, $yp, $mclr, $mclr );
  106. last MARKER;
  107. };
  108. ($mtype == 6) && do 
  109. { # Diamond, open
  110. $graph->line( $l, $yp, $xp, $t, $mclr );
  111. $graph->line( $xp, $t, $r, $yp, $mclr );
  112. $graph->line( $r, $yp, $xp, $b, $mclr );
  113. $graph->line( $xp, $b, $l, $yp, $mclr );
  114. last MARKER;
  115. };
  116. ($mtype == 7) && do 
  117. { # Circle, filled
  118. $graph->arc( $xp, $yp, 2 * $self->{marker_size},
  119.  2 * $self->{marker_size}, 0, 360, $mclr );
  120. $graph->fillToBorder( $xp, $yp, $mclr, $mclr );
  121. last MARKER;
  122. };
  123. ($mtype == 8) && do 
  124. { # Circle, open
  125. $graph->arc( $xp, $yp, 2 * $self->{marker_size},
  126.  2 * $self->{marker_size}, 0, 360, $mclr );
  127. last MARKER;
  128. };
  129. }
  130. }
  131.  
  132.  
  133. sub draw_legend_marker($$$$) # (GD::Image, data_set_number, x, y)
  134. {
  135. my $s = shift;
  136. my $g = shift;
  137. my $n = shift;
  138. my $x = shift;
  139. my $y = shift;
  140. my $ci = $s->set_clr( $g, $s->pick_data_clr($n) );
  141. my $old_ms = $s->{marker_size};
  142. my $ms = _min($s->{legend_marker_height}, $s->{legend_marker_width});
  143. ($s->{marker_size} > $ms/2) and $s->{marker_size} = $ms/2;
  144. $x += int($s->{legend_marker_width}/2);
  145. $y += int($s->{lg_el_height}/2);
  146. $n = $s->pick_marker($n);
  147. $s->marker($g, $x, $y, $n, $ci);
  148. $s->{marker_size} = $old_ms;
  149. }
  150. } # End of package GIFgraph::Points
  151. 1;