#!/usr/bin/perl -w use Tk; my $mw = MainWindow->new; my $mapw = $mw->Toplevel;#a windows just for the map #use strict; #MapMapMapMapMapMapMapMapMapMapMapMapMapMapMapMapMapMapMapMapMapMapMapMap my $mapcanvas = $mapw->Canvas;#->pack(-side => 'top', -fill => 'both', -expand => 1); my $map_vscroll = $mapw->Scrollbar( -command => ['yview', $mapcanvas] ); my $map_hscroll = $mapw->Scrollbar( -orient => 'horiz', -command => ['xview', $mapcanvas] ); $mapcanvas->configure(-relief => 'sunken',-bd => 2,); $mapcanvas->configure(-xscrollcommand => ['set', $map_hscroll]); $mapcanvas->configure(-yscrollcommand => ['set', $map_vscroll]); $mapcanvas->configure(-scrollregion => [-250, -250, 250, 250]);#need to figure out $top $left $right $bottom $map_hscroll->pack(-side => 'bottom', -fill => 'x'); $map_vscroll->pack(-side => 'right', -fill => 'y'); $mapcanvas->pack(-side => 'top', -fill => 'both', -expand => 1); #Iso2Display============================= sub xyz2xy { my ($locx, $locy, $locz) = @_; my $dx = $locx - $locz; #+ ($mapcanvas->Width / 2); my $dy = $locy + 0.5 * ($locx + $locz); #+ ($mapcanvas->Height / 2); return ($dx, $dy); };#end sub xyz2xy sub xyz2y { my ($locx, $locy, $locz) = @_; #my $dx = $locx - $locz; #+ ($mapcanvas->Width / 2); my $dy = ($mapcanvas->Height / 2) - $locy + 0.5 * ($locx + $locz); return $dy; };#end sub xyz2y sub xyz2x { my ($locx, $locy, $locz) = @_; my $dx = $locx - $locz + ($mapcanvas->Width / 2); # my $dy = $locy + 0.5 * ($locx + $locz); #+ ($mapcanvas->Height / 2); return $dx; };#end sub xyz2x #end Iso2Display============================= #<------------------------- sub lines{ for($i = -195;$i < 196; $i += 15){ $mapcanvas->createLine ( xyz2x( $i,0,195),xyz2y( $i,0,195), xyz2x( $i,0,-195),xyz2y( $i,0,-195)); }; for($i = -195;$i < 196; $i += 15){ $mapcanvas->createLine ( xyz2x( 195,0, $i),xyz2y( 195,0, $i), xyz2x(-195,0, $i),xyz2y(-195,0, $i)); }; };#end sub lines #$lab->place(-x => 50, -y => 50); #&xyz2x(-5,0,-5),&xyz2y(-5,0,-5)); #$mapcanvas->createLine (0,0,10,10); use Tk::widgets qw(Photo Animation); my $file = "meStandSouth.gif"; my $img = $mw->Animation('-format' => 'gif',-file => $file); #my $img = $mw->Photo(-file => "meStandSouth.gif"); my $img2= $mw->Animation('-format' => 'gif',-file => "meStandSouth.gif"); my $cimg = $mapcanvas->createImage(50,50, -image => $img2); $img2->start_animation(100); $img->start_animation(100); my $lab = $mw->Label(-image => $img); my ($melocx, $melocy, $melocz) = (0,0,0); #$img->start_animation(100); sub showme {print "$melocx $melocy $melocz \n", &xyz2x($melocx, $melocy, $melocz), "|", &xyz2y($melocx, $melocy, $melocz), "\n";$lab->place(-x => xyz2x($melocx, $melocy, $melocz), -y => xyz2y($melocx, $melocy, $melocz));} #<------------------------- my $lines = $mw->Button(-text => 'lines', -command => sub{lines}); $lines->pack; # my $startxu = $mw->Button(-text => 'X+', -command => sub{$melocx += 1;&showme()}); $startxu->pack(-side => 'left'); my $startxd = $mw->Button(-text => 'X-', -command => sub{$melocx += -1;&showme()}); $startxd->pack(-side => 'left'); my $startyu = $mw->Button(-text => 'Y+', -command => sub{$melocy += 1;&showme()}); $startyu->pack(-side => 'left'); my $startyd = $mw->Button(-text => 'Y-', -command => sub{$melocy += -1;&showme()}); $startyd->pack(-side => 'left'); my $startzu = $mw->Button(-text => 'Z+', -command => sub{$melocz += 1;&showme()}); $startzu->pack(-side => 'left'); my $startzd = $mw->Button(-text => 'Z-', -command => sub{$melocz += -1;&showme()}); $startzd->pack(-side => 'left'); $lab->pack; #points----------------------------- $dx1 = 10; $dy1 = 1; $dz1 = 10; $dx2 = 20; $dy2 = 1; $dz2 = 10; $dx3 = 10; $dy3 = 1; $dz3 = 20; $dx4 = 20; $dy4 = 1; $dz4 = 20; sub showpoints{ $locx1 = $dx1 - $dz1 + ($mapcanvas->Width / 2); $locy1 = $dy1 + 0.5 * ($dx1 + $dz1) + ($mapcanvas->Height / 2); $locx2 = $dx2 - $dz2 + ($mapcanvas->Width / 2); $locy2 = $dy2 + 0.5 * ($dx2 + $dz2) + ($mapcanvas->Height / 2); $locx3 = $dx3 - $dz3 + ($mapcanvas->Width / 2); $locy3 = $dy3 + 0.5 * ($dx3 + $dz3) + ($mapcanvas->Height / 2); $locx4 = $dx4 - $dz4 + ($mapcanvas->Width / 2); $locy4 = $dy4 + 0.5 * ($dx4 + $dz4) + ($mapcanvas->Height / 2); #---------------------- $mapcanvas->create(oval => $locx1 + -05, $locy1 + -05, $locx1 + 5, $locy1 + 5, -fill => 'blue', -tags => ['popup']); #---------------------- #---------------------- $mapcanvas->create(oval => $locx2 + -05, $locy2 + -05, $locx2 + 5, $locy2 + 5, -fill => 'red', -tags => ['popup']); #---------------------- #---------------------- $mapcanvas->create(oval => $locx3 + -05, $locy3 + -05, $locx3 + 5, $locy3 + 5, -fill => 'green', -tags => ['popup']); #---------------------- #---------------------- $mapcanvas->create(oval => $locx4 + -05, $locy4 + -05, $locx4 + 5, $locy4 + 5, -fill => 'yellow', -tags => ['popup']); #---------------------- }; my $start = $mw->Button(-text => 'Start', -command => sub{showpoints}); $start->pack; #end points------------------------------ MainLoop; __END__