my ($xlock,$ylock); # These keep track of the first coordinate clicked on $PLOT->CanvasBind("", [sub { $DRAWING_IN_PROGRESS=1; my ($canv,$x,$y)=@_; ($xlock,$ylock)=($canv->canvasx($x),$canv->canvasy($y)); $canv->delete("zoombox"); $canv->createRectangle($xlock,$ylock,$xlock,$ylock,-tag=>"zoombox",-outline=>'lightgray'); }, Ev('x'), Ev('y')]); $PLOT->CanvasBind("", [sub { my ($canv,$x,$y)=@_; if ($DRAWING_IN_PROGRESS==1) { $DRAWING_IN_PROGRESS=0; $canv->delete("zoombox"); $xend=$canv->canvasx($x); $yend=$canv->canvasy($y); if ($xlock==$xend || $ylock==$yend){ $canv->delete("zoombox"); return 0; } # Convert back to real coordinates ($X1,$Y1)=(($xend-$xzero)/$xscale,-($yend-$yzero)/$yscale); ($X2,$Y2)=(($xlock-$xzero)/$xscale,-($ylock-$yzero)/$yscale); if ($X1==$X2 || $Y1==$Y2) { return 0; } if ($X1<$X2) { $XMAX=$X2; $XMIN=$X1; } else { $XMAX=$X1; $XMIN=$X2; } if ($Y1<$Y2) { $YMAX=$Y2; $YMIN=$Y1; } else { $YMAX=$Y1; $YMIN=$Y2; } plot($plot_f_ref,\$canv,$data_ref); } }, Ev('x'), Ev('y')]); $PLOT->CanvasBind("", [sub { my ($canv,$x,$y)=@_; my ($xm,$ym,$xx,$yx)=($XMIN,$YMIN,$XMAX,$YMAX); $x=$canv->canvasx($x); $y=$canv->canvasy($y); ($x,$y)=(($x-$xzero)/$xscale,-($y-$yzero)/$yscale); $XMIN=$x-($xx-$xm)/4; $XMAX=$x+($xx-$xm)/4; $YMIN=$y-($yx-$ym)/4; $YMAX=$y+($yx-$ym)/4; ($XTIC,$YTIC)=($XTIC/2,$YTIC/2); plot($plot_f_ref,\$canv,$data_ref); }, Ev('x'), Ev('y')]); #### $PLOT->CanvasBind("", [sub { my ($canv,$x,$y)=@_; $x=$canv->canvasx($x); $y=$canv->canvasy($y); $MOVING_IN_PROGRESS=1; $canv->createLine($x,$y,$x,$y,-tag=>'zoombox'); ($xlock2,$ylock2)=($x,$y) }, Ev('x'), Ev('y')]); $PLOT->CanvasBind("", [sub { my ($canv,$x,$y)=@_; if ($MOVING_IN_PROGRESS==1) { $x=$canv->canvasx($x); $y=$canv->canvasy($y); ($x,$y)=(($x-$xzero)/$xscale,-($y-$yzero)/$yscale); ($xlock2,$ylock2)=(($xlock2-$xzero)/$xscale,-($ylock2-$yzero)/$yscale); $XMIN=$XMIN+($x-$xlock2); $XMAX=$XMAX+($x-$xlock2); $YMIN=$YMIN+($y-$ylock2); $YMAX=$YMAX+($y-$ylock2); plot($plot_f_ref,$plot_ref,$data_ref); $MOVING_IN_PROGRESS=0; } }, Ev('x'), Ev('y')]); #### $PLOT->CanvasBind("", [sub { print "Button 3 pressed"; my ($canv,$x,$y)=@_; my ($width,$height)=($XMAX-$XMIN,$YMAX-$YMIN); $x=$canv->canvasx($x); $y=$canv->canvasy($y); ($x,$y)=(($x-$xzero)/$xscale,-($y-$yzero)/$yscale); $XMIN=$x-$width; $XMAX=$x+$height; $YMIN=$y-$width; $YMAX=$y+$height; ($XTIC,$YTIC)=($XTIC*2,$YTIC*2); plot($plot_f_ref,\$canv,$data_ref); }, Ev('x'), Ev('y')]);