Tk-Contrib
view release on metacpan or search on metacpan
lib/Tk/Axis.pm view on Meta::CPAN
-tickfont => $tickfont,
-tst => $tst,
-width => $width,
-xmin => $xmin,
-xmax => $xmax,
-ymin => $ymin,
-ymax => $ymax,
);
# $height - height of the window
# $width - width ......
# $xmin - lowest x value we will display
# $xmax - highest .....
# $ymin - lowest y value .....
# $ymax - highest .....
# $margin - the number of pixels used as a margin around the plot
# $tick - the length (in pixels) of the tickmarks
# $tst - the step size for the tick marks
# $tst[x|y]- step size for tick marks on the x (or y) axis
# (if not specified tst is used)
# $tickfont - for for the lables
=head1 DESCRIPTION
This is an improved version of the axis widget. Changes with respect to the
previous version are :
=over 4
=item *
the 'pack' has been moved out the widget. One has to do his own packing
=item *
it is now possible to work in the coordinates of the axis. The following
piece of code draws a line between the points (2 , 3.1) (4 , 4).
$t->create('line',$t->plx(2),$t->ply(3.1),$t->plx(4),$t->ply(4));
=back
=head1 AUTHOR
Kris Boulez (Kris.Boulez@rug.ac.be)
Biomolecular NMR unit <http://bionmr1.rug.ac.be/~kris>
University of Ghent, Belgium
=cut
use strict;
require Tk::Canvas;
use Carp;
use vars qw($VERSION @ISA);
$VERSION = substr(q$Revision: 1.5 $, 10) + 1;
@ISA = qw(Tk::Derived Tk::Canvas);
Construct Tk::Widget 'Axis';
# Added since v 0.1
# -----------------
# - plx en ply allow you to work in axis coordinates
# (eg. $t->create('line', $t->plx(.3), $t->ply(.4), $t->plx(3.2),
# $t->ply(5.3)); )
# - pack is moved out.
#
# This is an Axis widget. It draws an XY axis on the screen and draws
# tickmarks. This is the first public version (v 0.2), all comments,
# crticism, ... are welcome (kris@bionmr1.rug.ac.be).
#
# I would like to thank the following people :
# - Ton Rullmann (rull@nmr.chem.ruu.nl) who started my quest for a way to
# draw 2D plot from within Perl
# - Stephen O. Lidie (lusol@Turkey.CC.Lehigh.edu) who provided me with a
# 2D plot script. He also asked the question "why don't you write a new
# widget for it ?"
# - Nick Ing-Simmons (nik@tiuk.ti.com) without who there would be no ptk
# and whose advice was invaluable while trying to create this widget
#
# It is used as follows
#
# require Axis;
#
sub Populate #using Populate from Tk::Derived
{
my ($w,$args) = @_;
$w->SUPER::Populate($args);
$w->ConfigSpecs(
'-xmin' => ['PASSIVE',undef,undef,0],
'-xmax' => ['PASSIVE',undef,undef,100], #undef],
'-ymin' => ['PASSIVE',undef,undef,0],
'-ymax' => ['PASSIVE',undef,undef,100], #undef],
'-margin' => ['PASSIVE',undef,undef,25],
'-tick' => ['PASSIVE',undef,undef,10],
'-tst' => ['PASSIVE',undef,undef,5],
'-tstx' => ['PASSIVE',undef,undef,undef],
'-tsty' => ['PASSIVE',undef,undef,undef],
'-tickfont' => ['PASSIVE',undef,undef,'fixed']
); # these options are new for the widget, the last value is
# the default.
} #end of Populate
sub ConfigChanged {
my ($w,$args)= @_;;
my $xmin = $w->cget(-xmin); # how expensive is a ->cget ?
my $xmax = $w->cget(-xmax);
my $cx = $w->cget(-width);
my $mar = $w->cget(-margin);
my $ymin = $w->cget(-ymin);
my $ymax = $w->cget(-ymax);
my $cy = $w->cget(-height);
my $tick = $w->cget(-tick);
my $tst = $w->cget(-tst);
my $tstx = $w->cget(-tstx);
my $tsty = $w->cget(-tsty);
my $tickfont = $w->cget(-tickfont);
if (!defined ($xmax) || !defined ($ymax)) { # at least xmax and ymax needed
croak "Axis: `Show' method requires xmax and ymax";
}
if (!defined ($tstx)) {$tstx = $tst;}
if (!defined ($tsty)) {$tsty = $tst;}
if (!defined ($tickfont)) {$tickfont = "fixed";}
my ($zx,$zy,$t); # zx (zy) is the value (in window coordinates) where
# x (y) is 0 on the X (Y) axis
if (abs($xmin+$xmax) > abs($xmin-$xmax)) { # both values pos/neg
$zx=$mar;
}
else {
$zx = $w->plx(0);
}
if (abs($ymin+$ymax) > abs($ymin-$ymax)) {
$zy=$cy-$mar;
}
else { # $cy - $mar is lowest point where we will draw
$zy = $w->ply(0);
}
# X-axis
# ------
( run in 2.329 seconds using v1.01-cache-2.11-cpan-524268b4103 )